passagemath-singular 10.6.31rc3__cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_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-gnu.so +0 -0
- passagemath_singular-10.6.31rc3.dist-info/METADATA +183 -0
- passagemath_singular-10.6.31rc3.dist-info/RECORD +491 -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-20aec911.4.1.so +0 -0
- passagemath_singular.libs/libcddgmp-21acf0c6.so.0.1.3 +0 -0
- passagemath_singular.libs/libfactory-4-fcee31da.4.1.so +0 -0
- passagemath_singular.libs/libflint-66e12231.so.21.0.0 +0 -0
- passagemath_singular.libs/libgf2x-a4cdec90.so.3.0.0 +0 -0
- passagemath_singular.libs/libgfortran-83c28eba.so.5.0.0 +0 -0
- passagemath_singular.libs/libgmp-6e109695.so.10.5.0 +0 -0
- passagemath_singular.libs/libgsl-cda90e79.so.28.0.0 +0 -0
- passagemath_singular.libs/libmpfr-82690d50.so.6.2.1 +0 -0
- passagemath_singular.libs/libntl-e6f0d543.so.44.0.1 +0 -0
- passagemath_singular.libs/libomalloc-0-5c9e866e.9.6.so +0 -0
- passagemath_singular.libs/libopenblasp-r0-6dcb67f9.3.29.so +0 -0
- passagemath_singular.libs/libpolys-4-5c0a87e0.4.1.so +0 -0
- passagemath_singular.libs/libquadmath-2284e583.so.0.0.0 +0 -0
- passagemath_singular.libs/libreadline-ea270e21.so.8.2 +0 -0
- passagemath_singular.libs/libsingular_resources-4-a1aafc6d.4.1.so +0 -0
- passagemath_singular.libs/libtinfo-ceb117d9.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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-gnu.so +0 -0
- sage/algebras/quatalg/quaternion_algebra_cython.pyx +261 -0
- sage/algebras/quatalg/quaternion_algebra_element.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-linux-gnu.so +0 -0
- sage/libs/singular/option.pyx +671 -0
- sage/libs/singular/polynomial.cpython-314-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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-x86_64-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,1174 @@
|
|
|
1
|
+
////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version polylib.lib 4.4.0.0 Nov_2023 "; // $Id: 35d3c5db47d8165ccd2b86ecf2f2d960e1e7bca4 $
|
|
3
|
+
category="General purpose";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: polylib.lib Procedures for Manipulating Polys, Ideals, Modules
|
|
6
|
+
AUTHORS: O. Bachmann, G.-M. Greuel, A. Fruehbis
|
|
7
|
+
|
|
8
|
+
PROCEDURES:
|
|
9
|
+
cyclic(int); ideal of cyclic n-roots
|
|
10
|
+
elemSymmId(int); ideal of elementary symmetric polynomials
|
|
11
|
+
katsura([i]); katsura [i] ideal
|
|
12
|
+
freerank(poly/...) rank of coker(input) if coker is free else -1
|
|
13
|
+
is_zero(poly/...); int, =1 resp. =0 if coker(input) is 0 resp. not
|
|
14
|
+
lcm(ideal); lcm of given generators of ideal
|
|
15
|
+
maxcoef(poly/...); maximal length of coefficient occurring in poly/...
|
|
16
|
+
maxdeg(poly/...); int/intmat = degree/s of terms of maximal order
|
|
17
|
+
maxdeg1(poly/...); int = [weighted] maximal degree of input
|
|
18
|
+
mindeg(poly/...); int/intmat = degree/s of terms of minimal order
|
|
19
|
+
mindeg1(poly/...); int = [weighted] minimal degree of input
|
|
20
|
+
normalize(poly/...); normalize poly/... such that leading coefficient is 1
|
|
21
|
+
rad_con(p,I); check radical containment of polynomial p in ideal I
|
|
22
|
+
content(f); content of polynomial/vector f
|
|
23
|
+
mod2id(M,iv); conversion of a module M to an ideal
|
|
24
|
+
id2mod(i,iv); conversion inverse to mod2id
|
|
25
|
+
substitute(I,...) substitute in I variables by polynomials
|
|
26
|
+
subrInterred(i1,i2,iv);interred w.r.t. a subset of variables
|
|
27
|
+
newtonDiag(f); Newton diagram of a polynomial
|
|
28
|
+
hilbPoly(I); Hilbert polynomial of basering/I
|
|
29
|
+
(parameters in square brackets [] are optional)
|
|
30
|
+
|
|
31
|
+
";
|
|
32
|
+
|
|
33
|
+
LIB "general.lib";
|
|
34
|
+
LIB "ring.lib";
|
|
35
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
36
|
+
static proc bino(int a, int b)
|
|
37
|
+
{
|
|
38
|
+
//computes binomial var(1)+a over b
|
|
39
|
+
int i;
|
|
40
|
+
if(b==0){return(1);}
|
|
41
|
+
poly p=(var(1)+a)/b;
|
|
42
|
+
for(i=1;i<=b-1;i++)
|
|
43
|
+
{
|
|
44
|
+
p=p*(var(1)+a-i)/i;
|
|
45
|
+
}
|
|
46
|
+
return(p);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
proc hilbPoly(ideal I)
|
|
50
|
+
"USAGE: hilbPoly(I); I a homogeneous ideal
|
|
51
|
+
RETURN: the Hilbert polynomial of basering/I as an intvec v=v_0,...,v_r
|
|
52
|
+
such that the Hilbert polynomial is (v_0+v_1*t+...v_r*t^r)/r!
|
|
53
|
+
EXAMPLE: example hilbPoly; shows an example
|
|
54
|
+
"
|
|
55
|
+
{
|
|
56
|
+
def R=basering;
|
|
57
|
+
if(!attrib(I,"isSB")){I=std(I);}
|
|
58
|
+
bigintvec v=hilb(I,2);
|
|
59
|
+
int s=dim(I);
|
|
60
|
+
intvec hp;
|
|
61
|
+
if(s<=0){return(hp);}
|
|
62
|
+
int d=size(v)-2;
|
|
63
|
+
ring S=0,t,dp;
|
|
64
|
+
poly p=v[1+d]*bino(s-1-d,s-1);
|
|
65
|
+
int i;
|
|
66
|
+
for(i=1;i<=d;i++)
|
|
67
|
+
{
|
|
68
|
+
p=p+v[d-i+1]*bino(s-1-d+i,s-1);
|
|
69
|
+
}
|
|
70
|
+
int n=1;
|
|
71
|
+
for(i=2;i<=s-1;i++){n=n*i;}
|
|
72
|
+
p=n*p;
|
|
73
|
+
hp[s]=int(leadcoef(p));
|
|
74
|
+
for(i=2;i<=size(p);i++)
|
|
75
|
+
{
|
|
76
|
+
hp[leadexp(p[i])+1]=int(leadcoef(p[i]));
|
|
77
|
+
}
|
|
78
|
+
setring R;
|
|
79
|
+
return(hp);
|
|
80
|
+
}
|
|
81
|
+
example
|
|
82
|
+
{ "EXAMPLE:"; echo = 2;
|
|
83
|
+
ring r = 0,(b,c,t,h),dp;
|
|
84
|
+
ideal I=
|
|
85
|
+
bct-t2h+2th2+h3,
|
|
86
|
+
bt3-ct3-t4+b2th+c2th-2bt2h+2ct2h+2t3h-bch2-2bth2+2cth2+2th3,
|
|
87
|
+
b2c2+bt2h-ct2h-t3h+b2h2+2bch2+c2h2-2bth2+2cth2+t2h2-2bh3+2ch3+2th3+3h4,
|
|
88
|
+
c2t3+ct4-c3th-2c2t2h-2ct3h-t4h+bc2h2-2c2th2-bt2h2+4t3h2+2bth3-2cth3-t2h3
|
|
89
|
+
+bh4-6th4-2h5;
|
|
90
|
+
hilbPoly(I);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
94
|
+
proc substitute (def I,list #)
|
|
95
|
+
"USAGE: - case 1: typeof(#[1])==poly:
|
|
96
|
+
substitute (I,v,f[,v1,f1,v2,f2,...]); I object of basering which
|
|
97
|
+
can be mapped, v,v1,v2,.. ring variables, f,f1,f2,... poly
|
|
98
|
+
@* - case 2: typeof(#[1])==ideal:
|
|
99
|
+
substitute (I,v,f); I object of basering which can be mapped,
|
|
100
|
+
v ideal of ring variables, f ideal
|
|
101
|
+
RETURN: object of same type as I,
|
|
102
|
+
@* - case 1: ring variable v,v1,v2,... substituted by polynomials
|
|
103
|
+
f,f1,f2,..., in this order
|
|
104
|
+
@* - case 2: ring variables in v substituted by polynomials in f:
|
|
105
|
+
v[i] is substituted by f[i], i=1,...,i=min(size(v),ncols(f))
|
|
106
|
+
NOTE: this procedure extends the built-in command subst via maps
|
|
107
|
+
EXAMPLE: example substitute; shows an example
|
|
108
|
+
"
|
|
109
|
+
{
|
|
110
|
+
def bas = basering;
|
|
111
|
+
ideal m = maxideal(1);
|
|
112
|
+
int i,ii;
|
|
113
|
+
if(typeof(#[1])=="poly")
|
|
114
|
+
{
|
|
115
|
+
poly v = #[1];
|
|
116
|
+
poly f = #[2];
|
|
117
|
+
map phi = bas,m;
|
|
118
|
+
def J = I;
|
|
119
|
+
for (ii=1; ii<=size(#) - 1; ii=ii+2)
|
|
120
|
+
{
|
|
121
|
+
m = maxideal(1);
|
|
122
|
+
i=rvar(#[ii]);
|
|
123
|
+
m[i] = #[ii+1];
|
|
124
|
+
phi = bas,m;
|
|
125
|
+
J = phi(J);
|
|
126
|
+
}
|
|
127
|
+
return(J);
|
|
128
|
+
}
|
|
129
|
+
if(typeof(#[1])=="ideal")
|
|
130
|
+
{
|
|
131
|
+
ideal v = #[1];
|
|
132
|
+
ideal f = #[2];
|
|
133
|
+
int mi = ncols(v);
|
|
134
|
+
if(ncols(f)<mi)
|
|
135
|
+
{
|
|
136
|
+
mi = ncols(f);
|
|
137
|
+
}
|
|
138
|
+
def J = I;
|
|
139
|
+
for (ii=1; ii<=mi; ii++)
|
|
140
|
+
{
|
|
141
|
+
m[rvar(v[ii])]=f[ii];
|
|
142
|
+
}
|
|
143
|
+
map phi = bas,m;
|
|
144
|
+
J = phi(I);
|
|
145
|
+
return(J);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
example
|
|
149
|
+
{ "EXAMPLE:"; echo = 2;
|
|
150
|
+
ring r = 0,(b,c,t),dp;
|
|
151
|
+
ideal I = -bc+4b2c2t,bc2t-5b2c;
|
|
152
|
+
substitute(I,c,b+c,t,0,b,b-1);
|
|
153
|
+
ideal v = c,t,b;
|
|
154
|
+
ideal f = b+c,0,b-1;
|
|
155
|
+
substitute(I,v,f);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
159
|
+
proc cyclic (int n)
|
|
160
|
+
"USAGE: cyclic(n); n integer
|
|
161
|
+
RETURN: ideal of cyclic n-roots from 1-st n variables of basering
|
|
162
|
+
EXAMPLE: example cyclic; shows examples
|
|
163
|
+
"
|
|
164
|
+
{
|
|
165
|
+
//----------------------------- procedure body --------------------------------
|
|
166
|
+
ideal m = maxideal(1);
|
|
167
|
+
m = m[1..n],m[1..n];
|
|
168
|
+
int i,j;
|
|
169
|
+
ideal s; poly t;
|
|
170
|
+
for ( j=0; j<=n-2; j++ )
|
|
171
|
+
{
|
|
172
|
+
t=0;
|
|
173
|
+
for( i=1;i<=n;i++ ) { t=t+product(m,i..i+j); }
|
|
174
|
+
s=s+t;
|
|
175
|
+
}
|
|
176
|
+
s=s,product(m,1..n)-1;
|
|
177
|
+
return (s);
|
|
178
|
+
}
|
|
179
|
+
//-------------------------------- examples -----------------------------------
|
|
180
|
+
example
|
|
181
|
+
{ "EXAMPLE:"; echo = 2;
|
|
182
|
+
ring r=0,(u,v,w,x,y,z),lp;
|
|
183
|
+
cyclic(nvars(basering));
|
|
184
|
+
homog(cyclic(5),z);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
188
|
+
proc elemSymmPoly(int d, int lindex, int hindex)
|
|
189
|
+
"USAGE: elemSymmPoly(d,lindex,hindex); d,lindex,hindex integers
|
|
190
|
+
RETURN: elementary symmetric polynomial of degree d for variables
|
|
191
|
+
@* var(lindex),...,var(hindex) of basering
|
|
192
|
+
EXAMPLE: example elemSymmPoly; shows an example
|
|
193
|
+
"
|
|
194
|
+
{
|
|
195
|
+
if(hindex - lindex + 1 < d)
|
|
196
|
+
{
|
|
197
|
+
int i = hindex - lindex + 1;
|
|
198
|
+
"========================================================";
|
|
199
|
+
"There is no elementary symmetric polynomial of degree "+string(d);
|
|
200
|
+
"for just "+string(i)+" variables.";
|
|
201
|
+
"========================================================";
|
|
202
|
+
return(poly(0));
|
|
203
|
+
}
|
|
204
|
+
if(d == 0)
|
|
205
|
+
{
|
|
206
|
+
return(poly(1));
|
|
207
|
+
}
|
|
208
|
+
else
|
|
209
|
+
{
|
|
210
|
+
int i;
|
|
211
|
+
poly p;
|
|
212
|
+
for (i = lindex; i <= hindex - d + 1; i++)
|
|
213
|
+
{
|
|
214
|
+
p = p + var(i) * elemSymmPoly(d - 1, i + 1, hindex);
|
|
215
|
+
}
|
|
216
|
+
return(p);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
example
|
|
220
|
+
{ "EXAMPLE:"; echo = 2;
|
|
221
|
+
ring R = 0, (u,v,w,x,y,z), lp;
|
|
222
|
+
elemSymmPoly(3,2,5);
|
|
223
|
+
elemSymmPoly(6,1,6);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
//////////////////////////////////////////////////////////////////////////
|
|
227
|
+
proc elemSymmId(int n)
|
|
228
|
+
"USAGE: elemSymmId(n); n integer
|
|
229
|
+
RETURN: ideal of elementary symmetric polynomials for 1-st n
|
|
230
|
+
@* variables of basering
|
|
231
|
+
EXAMPLE: example elemSymmId; shows an example
|
|
232
|
+
{
|
|
233
|
+
int i;
|
|
234
|
+
ideal symm;
|
|
235
|
+
for(i = 1; i <= n; i++)
|
|
236
|
+
{
|
|
237
|
+
symm = symm + elemSymmPoly(i, 1, n);
|
|
238
|
+
}
|
|
239
|
+
return(symm);
|
|
240
|
+
}
|
|
241
|
+
example
|
|
242
|
+
{ "EXAMPLE:"; echo = 2;
|
|
243
|
+
ring R = 0, (v,w,x,y,z), lp;
|
|
244
|
+
elemSymmId(3);
|
|
245
|
+
elemSymmId(nvars(basering));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
//////////////////////////////////////////////////////////////////////////
|
|
249
|
+
proc katsura
|
|
250
|
+
"USAGE: katsura([n]); n integer
|
|
251
|
+
RETURN: katsura(n) : n-th katsura ideal of
|
|
252
|
+
(1) newly created and set ring (32003, x(0..n), dp), if
|
|
253
|
+
nvars(basering) < n
|
|
254
|
+
(2) basering, if nvars(basering) >= n
|
|
255
|
+
katsura() : katsura ideal of basering
|
|
256
|
+
EXAMPLE: example katsura; shows examples
|
|
257
|
+
"
|
|
258
|
+
{
|
|
259
|
+
int n;
|
|
260
|
+
if ( size(#) == 1 && typeof(#[1]) == "int")
|
|
261
|
+
{
|
|
262
|
+
n = #[1] - 1;
|
|
263
|
+
while (1)
|
|
264
|
+
{
|
|
265
|
+
if (defined(basering))
|
|
266
|
+
{
|
|
267
|
+
if (nvars(basering) >= #[1]) {break;}
|
|
268
|
+
}
|
|
269
|
+
ring katsura_ring = 32003, x(0..#[1]), dp;
|
|
270
|
+
keepring katsura_ring;
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
else
|
|
275
|
+
{
|
|
276
|
+
n = nvars(basering) -1;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
ideal s;
|
|
280
|
+
int i, j;
|
|
281
|
+
poly p;
|
|
282
|
+
|
|
283
|
+
p = -1;
|
|
284
|
+
for (i = -n; i <= n; i++)
|
|
285
|
+
{
|
|
286
|
+
p = p + kat_var(i, n);
|
|
287
|
+
}
|
|
288
|
+
s[1] = p;
|
|
289
|
+
|
|
290
|
+
for (i = 0; i < n; i++)
|
|
291
|
+
{
|
|
292
|
+
p = -1 * kat_var(i,n);
|
|
293
|
+
for (j = -n; j <= n; j++)
|
|
294
|
+
{
|
|
295
|
+
p = p + kat_var(j,n) * kat_var(i-j, n);
|
|
296
|
+
}
|
|
297
|
+
s = s,p;
|
|
298
|
+
}
|
|
299
|
+
return (s);
|
|
300
|
+
}
|
|
301
|
+
//-------------------------------- examples -----------------------------------
|
|
302
|
+
example
|
|
303
|
+
{
|
|
304
|
+
"EXAMPLE:"; echo = 2;
|
|
305
|
+
ring r; basering;
|
|
306
|
+
katsura();
|
|
307
|
+
katsura(4); basering;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
proc kat_var(int i, int n)
|
|
311
|
+
{
|
|
312
|
+
poly p;
|
|
313
|
+
if (i < 0) { i = -i;}
|
|
314
|
+
if (i <= n) { p = var(i+1); }
|
|
315
|
+
return (p);
|
|
316
|
+
}
|
|
317
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
318
|
+
|
|
319
|
+
proc freerank
|
|
320
|
+
"USAGE: freerank(M[,any]); M=poly/ideal/vector/module/matrix
|
|
321
|
+
COMPUTE: rank of module presented by M in case it is free.
|
|
322
|
+
By definition this is vdim(coker(M)/m*coker(M)) if coker(M)
|
|
323
|
+
is free, where m is the maximal ideal of the variables of the
|
|
324
|
+
basering and M is considered to be a matrix.
|
|
325
|
+
(the 0-module is free of rank 0)
|
|
326
|
+
RETURN: rank of coker(M) if coker(M) is free and -1 else;
|
|
327
|
+
in case of a second argument return a list:
|
|
328
|
+
L[1] = rank of coker(M) or -1
|
|
329
|
+
L[2] = minbase(M)
|
|
330
|
+
NOTE: freerank(syz(M)); computes the rank of M if M is free (and -1 else)
|
|
331
|
+
EXAMPLE: example freerank; shows examples
|
|
332
|
+
"
|
|
333
|
+
{
|
|
334
|
+
int rk;
|
|
335
|
+
def M = simplify(#[1],10);
|
|
336
|
+
resolution mre = res(M,2);
|
|
337
|
+
intmat B = betti(mre);
|
|
338
|
+
if ( ncols(B)>1 ) { rk = -1; }
|
|
339
|
+
else { rk = sum(B[1..nrows(B),1]); }
|
|
340
|
+
if (size(#) == 2) { list L=rk,mre[1]; return(L);}
|
|
341
|
+
return(rk);
|
|
342
|
+
}
|
|
343
|
+
example
|
|
344
|
+
{"EXAMPLE"; echo=2;
|
|
345
|
+
ring r;
|
|
346
|
+
ideal i=x;
|
|
347
|
+
module M=[x,0,1],[-x,0,-1];
|
|
348
|
+
freerank(M); // should be 2, coker(M) is not free
|
|
349
|
+
freerank(syz (M),"");
|
|
350
|
+
// [1] should be 1, coker(syz(M))=M is free of rank 1
|
|
351
|
+
// [2] should be gen(2)+gen(1) (minimal relation of M)
|
|
352
|
+
freerank(i);
|
|
353
|
+
freerank(syz(i)); // should be 1, coker(syz(i))=i is free of rank 1
|
|
354
|
+
}
|
|
355
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
356
|
+
|
|
357
|
+
proc is_zero
|
|
358
|
+
"USAGE: is_zero(M[,any]); M=poly/ideal/vector/module/matrix
|
|
359
|
+
RETURN: integer, 1 if coker(M)=0 resp. 0 if coker(M)!=0, where M is
|
|
360
|
+
considered as matrix.
|
|
361
|
+
If a second argument is given, return a list:
|
|
362
|
+
L[1] = 1 if coker(M)=0 resp. 0 if coker(M)!=0
|
|
363
|
+
L[2] = dim(M)
|
|
364
|
+
EXAMPLE: example is_zero; shows examples
|
|
365
|
+
"
|
|
366
|
+
{
|
|
367
|
+
int d=dim(std(#[1]));
|
|
368
|
+
int a = ( d==-1 );
|
|
369
|
+
if( size(#) >1 ) { return(list(a,d)); }
|
|
370
|
+
return(a);
|
|
371
|
+
}
|
|
372
|
+
example
|
|
373
|
+
{ "EXAMPLE:"; echo=2;
|
|
374
|
+
ring r;
|
|
375
|
+
module m = [x],[y],[1,z];
|
|
376
|
+
is_zero(m,1);
|
|
377
|
+
qring q = std(ideal(x2+y3+z2));
|
|
378
|
+
ideal j = x2+y3+z2-37;
|
|
379
|
+
is_zero(j);
|
|
380
|
+
}
|
|
381
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
382
|
+
|
|
383
|
+
proc maxcoef (def f)
|
|
384
|
+
"USAGE: maxcoef(f); f poly/ideal/vector/module/matrix
|
|
385
|
+
RETURN: maximal length of coefficient of f of type int (by measuring the
|
|
386
|
+
length of the string of each coefficient)
|
|
387
|
+
EXAMPLE: example maxcoef; shows examples
|
|
388
|
+
"
|
|
389
|
+
{
|
|
390
|
+
//----------------------------- procedure body --------------------------------
|
|
391
|
+
int max,s,ii,jj; string t;
|
|
392
|
+
ideal i = ideal(matrix(f));
|
|
393
|
+
i = simplify(i,6); // delete 0's and keep first of equal elements
|
|
394
|
+
poly m = var(1); matrix C;
|
|
395
|
+
for (ii=2;ii<=nvars(basering);ii++) { m = m*var(ii); }
|
|
396
|
+
for (ii=1; ii<=size(i); ii++)
|
|
397
|
+
{
|
|
398
|
+
C = coef(i[ii],m);
|
|
399
|
+
for (jj=1; jj<=ncols(C); jj++)
|
|
400
|
+
{
|
|
401
|
+
t = string(C[2,jj]); s = size(t);
|
|
402
|
+
if ( t[1] == "-" ) { s = s - 1; }
|
|
403
|
+
if ( s > max ) { max = s; }
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
return(max);
|
|
407
|
+
}
|
|
408
|
+
//-------------------------------- examples -----------------------------------
|
|
409
|
+
example
|
|
410
|
+
{ "EXAMPLE:"; echo = 2;
|
|
411
|
+
ring r= 0,(x,y,z),ds;
|
|
412
|
+
poly g = 345x2-1234567890y+7/4z;
|
|
413
|
+
maxcoef(g);
|
|
414
|
+
ideal i = g,10/1234567890;
|
|
415
|
+
maxcoef(i);
|
|
416
|
+
// since i[2]=1/123456789
|
|
417
|
+
}
|
|
418
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
419
|
+
|
|
420
|
+
proc maxdeg (def id)
|
|
421
|
+
"USAGE: maxdeg(id); id poly/ideal/vector/module/matrix
|
|
422
|
+
RETURN: int/intmat, each component equals maximal degree of monomials in the
|
|
423
|
+
corresponding component of id, independent of ring ordering
|
|
424
|
+
(maxdeg of each var is 1).
|
|
425
|
+
Of type int, if id is of type poly; of type intmat otherwise
|
|
426
|
+
SEE ALSO: maxdeg1
|
|
427
|
+
EXAMPLE: example maxdeg; shows examples
|
|
428
|
+
"
|
|
429
|
+
{
|
|
430
|
+
//-------- subprocedure to find maximal degree of given component ----------
|
|
431
|
+
proc findmaxdeg
|
|
432
|
+
{
|
|
433
|
+
poly c = #[1];
|
|
434
|
+
if (c==0) { return(-1); }
|
|
435
|
+
//--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
|
|
436
|
+
int d = (deg(c)>=0)*deg(c)-(deg(c)<0)*deg(c);
|
|
437
|
+
int i = d;
|
|
438
|
+
while ( c-jet(c,i) != 0 ) { i = 2*(i+1); }
|
|
439
|
+
int o = i-1;
|
|
440
|
+
int u = (d != i)*((i div 2)-1);
|
|
441
|
+
//----------------------- "quick search" for maxdeg ------------------------
|
|
442
|
+
while ( (c-jet(c,i)==0)*(c-jet(c,i-1)!=0) == 0)
|
|
443
|
+
{
|
|
444
|
+
i = (o+1+u) div 2;
|
|
445
|
+
if (c-jet(c,i)!=0) { u = i+1; }
|
|
446
|
+
else { o = i-1; }
|
|
447
|
+
}
|
|
448
|
+
return(i);
|
|
449
|
+
}
|
|
450
|
+
//------------------------------ main program ---------------------------------
|
|
451
|
+
matrix M = matrix(id);
|
|
452
|
+
int r,c = nrows(M), ncols(M); int i,j;
|
|
453
|
+
intmat m[r][c];
|
|
454
|
+
for (i=r; i>0; i--)
|
|
455
|
+
{
|
|
456
|
+
for (j=c; j>0; j--) { m[i,j] = findmaxdeg(M[i,j]); }
|
|
457
|
+
}
|
|
458
|
+
if (typeof(id)=="poly") { return(m[1,1]); }
|
|
459
|
+
return(m);
|
|
460
|
+
}
|
|
461
|
+
//-------------------------------- examples -----------------------------------
|
|
462
|
+
example
|
|
463
|
+
{ "EXAMPLE:"; echo = 2;
|
|
464
|
+
ring r = 0,(x,y,z),wp(1,2,3);
|
|
465
|
+
poly f = x+y2+z3;
|
|
466
|
+
deg(f); //deg; returns weighted degree (in case of 1 block)!
|
|
467
|
+
maxdeg(f);
|
|
468
|
+
matrix m[2][2]=f+x10,1,0,f^2;
|
|
469
|
+
maxdeg(m);
|
|
470
|
+
}
|
|
471
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
472
|
+
|
|
473
|
+
proc maxdeg1 (def id,list #)
|
|
474
|
+
"USAGE: maxdeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
|
|
475
|
+
RETURN: integer, maximal [weighted] degree of monomials of id independent of
|
|
476
|
+
ring ordering, maxdeg1 of i-th variable is v[i] (default: v=1..1).
|
|
477
|
+
NOTE: This proc returns one integer while maxdeg returns, in general,
|
|
478
|
+
a matrix of integers. For one polynomial and if no intvec v is given
|
|
479
|
+
maxdeg is faster
|
|
480
|
+
EXAMPLE: example maxdeg1; shows examples
|
|
481
|
+
"
|
|
482
|
+
{
|
|
483
|
+
//-------- subprocedure to find maximal degree of given component ----------
|
|
484
|
+
proc findmaxdeg
|
|
485
|
+
{
|
|
486
|
+
poly c = #[1];
|
|
487
|
+
if (c==0) { return(-1); }
|
|
488
|
+
intvec v = #[2];
|
|
489
|
+
//--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
|
|
490
|
+
int d = (deg(c)>=0)*deg(c)-(deg(c)<0)*deg(c);
|
|
491
|
+
int i = d;
|
|
492
|
+
if ( c == jet(c,-1,v)) //case: maxdeg is negative
|
|
493
|
+
{
|
|
494
|
+
i = -d;
|
|
495
|
+
while ( c == jet(c,i,v) ) { i = 2*(i-1); }
|
|
496
|
+
int o = (d != -i)*((i div 2)+2) - 1;
|
|
497
|
+
int u = i+1;
|
|
498
|
+
int e = -1;
|
|
499
|
+
}
|
|
500
|
+
else //case: maxdeg is nonnegative
|
|
501
|
+
{
|
|
502
|
+
while ( c != jet(c,i,v) ) { i = 2*(i+1); }
|
|
503
|
+
int o = i-1;
|
|
504
|
+
int u = (d != i)*((i div 2)-1);
|
|
505
|
+
int e = 1;
|
|
506
|
+
}
|
|
507
|
+
//----------------------- "quick search" for maxdeg ------------------------
|
|
508
|
+
while ( ( c==jet(c,i,v) )*( c!=jet(c,i-1,v) ) == 0 )
|
|
509
|
+
{
|
|
510
|
+
i = (o+e+u) div 2;
|
|
511
|
+
if ( c!=jet(c,i,v) ) { u = i+1; }
|
|
512
|
+
else { o = i-1; }
|
|
513
|
+
}
|
|
514
|
+
return(i);
|
|
515
|
+
}
|
|
516
|
+
//------------------------------ main program ---------------------------------
|
|
517
|
+
ideal M = simplify(ideal(matrix(id)),8); //delete scalar multiples from id
|
|
518
|
+
int c = ncols(M);
|
|
519
|
+
int i,n;
|
|
520
|
+
if( size(#)==0 )
|
|
521
|
+
{
|
|
522
|
+
int m = maxdeg(M[c]);
|
|
523
|
+
for (i=c-1; i>0; i--)
|
|
524
|
+
{
|
|
525
|
+
n = maxdeg(M[i]);
|
|
526
|
+
m = (m>=n)*m + (m<n)*n; //let m be the maximum of m and n
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
else
|
|
530
|
+
{
|
|
531
|
+
intvec v=#[1]; //weight vector for the variables
|
|
532
|
+
int m = findmaxdeg(M[c],v);
|
|
533
|
+
for (i=c-1; i>0; i--)
|
|
534
|
+
{
|
|
535
|
+
n = findmaxdeg(M[i],v);
|
|
536
|
+
if( n>m ) { m=n; }
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
return(m);
|
|
540
|
+
}
|
|
541
|
+
//-------------------------------- examples -----------------------------------
|
|
542
|
+
example
|
|
543
|
+
{ "EXAMPLE:"; echo = 2;
|
|
544
|
+
ring r = 0,(x,y,z),wp(1,2,3);
|
|
545
|
+
poly f = x+y2+z3;
|
|
546
|
+
deg(f); //deg returns weighted degree (in case of 1 block)!
|
|
547
|
+
maxdeg1(f);
|
|
548
|
+
intvec v = ringweights(r);
|
|
549
|
+
maxdeg1(f,v); //weighted maximal degree
|
|
550
|
+
matrix m[2][2]=f+x10,1,0,f^2;
|
|
551
|
+
maxdeg1(m,v); //absolute weighted maximal degree
|
|
552
|
+
}
|
|
553
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
554
|
+
|
|
555
|
+
proc mindeg (def id)
|
|
556
|
+
"USAGE: mindeg(id); id poly/ideal/vector/module/matrix
|
|
557
|
+
RETURN: minimal degree/s of monomials of id, independent of ring ordering
|
|
558
|
+
(mindeg of each variable is 1) of type int if id of type poly, else
|
|
559
|
+
of type intmat.
|
|
560
|
+
SEE ALSO: mindeg1
|
|
561
|
+
EXAMPLE: example mindeg; shows examples
|
|
562
|
+
"
|
|
563
|
+
{
|
|
564
|
+
//--------- subprocedure to find minimal degree of given component ---------
|
|
565
|
+
proc findmindeg
|
|
566
|
+
{
|
|
567
|
+
poly c = #[1];
|
|
568
|
+
if (c==0) { return(-1); }
|
|
569
|
+
//--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
|
|
570
|
+
int d = (ord(c)>=0)*ord(c)-(ord(c)<0)*ord(c);
|
|
571
|
+
int i = d;
|
|
572
|
+
while ( jet(c,i) == 0 ) { i = 2*(i+1); }
|
|
573
|
+
int o = i-1;
|
|
574
|
+
int u = (d != i)*((i div 2)-1);
|
|
575
|
+
//----------------------- "quick search" for mindeg ------------------------
|
|
576
|
+
while ( (jet(c,u)==0)*(jet(c,o)!=0) )
|
|
577
|
+
{
|
|
578
|
+
i = (o+u) div 2;
|
|
579
|
+
if (jet(c,i)==0) { u = i+1; }
|
|
580
|
+
else { o = i-1; }
|
|
581
|
+
}
|
|
582
|
+
if (jet(c,u)!=0) { return(u); }
|
|
583
|
+
else { return(o+1); }
|
|
584
|
+
}
|
|
585
|
+
//------------------------------ main program ---------------------------------
|
|
586
|
+
matrix M = matrix(id);
|
|
587
|
+
int r,c = nrows(M), ncols(M); int i,j;
|
|
588
|
+
intmat m[r][c];
|
|
589
|
+
for (i=r; i>0; i--)
|
|
590
|
+
{
|
|
591
|
+
for (j=c; j>0; j--) { m[i,j] = findmindeg(M[i,j]); }
|
|
592
|
+
}
|
|
593
|
+
if (typeof(id)=="poly") { return(m[1,1]); }
|
|
594
|
+
return(m);
|
|
595
|
+
}
|
|
596
|
+
//-------------------------------- examples -----------------------------------
|
|
597
|
+
example
|
|
598
|
+
{ "EXAMPLE:"; echo = 2;
|
|
599
|
+
ring r = 0,(x,y,z),ls;
|
|
600
|
+
poly f = x5+y2+z3;
|
|
601
|
+
ord(f); // ord returns weighted order of leading term!
|
|
602
|
+
mindeg(f); // computes minimal degree
|
|
603
|
+
matrix m[2][2]=x10,1,0,f^2;
|
|
604
|
+
mindeg(m); // computes matrix of minimum degrees
|
|
605
|
+
}
|
|
606
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
607
|
+
|
|
608
|
+
proc mindeg1 (def id, list #)
|
|
609
|
+
"USAGE: mindeg1(id[,v]); id=poly/ideal/vector/module/matrix, v=intvec
|
|
610
|
+
RETURN: integer, minimal [weighted] degree of monomials of id independent of
|
|
611
|
+
ring ordering, mindeg1 of i-th variable is v[i] (default v=1..1).
|
|
612
|
+
NOTE: This proc returns one integer while mindeg returns, in general,
|
|
613
|
+
a matrix of integers. For one polynomial and if no intvec v is given
|
|
614
|
+
mindeg is faster.
|
|
615
|
+
EXAMPLE: example mindeg1; shows examples
|
|
616
|
+
"
|
|
617
|
+
{
|
|
618
|
+
//--------- subprocedure to find minimal degree of given component ---------
|
|
619
|
+
proc findmindeg
|
|
620
|
+
{
|
|
621
|
+
poly c = #[1];
|
|
622
|
+
intvec v = #[2];
|
|
623
|
+
if (c==0) { return(-1); }
|
|
624
|
+
//--- guess upper 'o' and lower 'u' bound, in case of negative weights -----
|
|
625
|
+
int d = (ord(c)>=0)*ord(c)-(ord(c)<0)*ord(c);
|
|
626
|
+
int i = d;
|
|
627
|
+
if ( jet(c,-1,v) !=0 ) //case: mindeg is negative
|
|
628
|
+
{
|
|
629
|
+
i = -d;
|
|
630
|
+
while ( jet(c,i,v) != 0 ) { i = 2*(i-1); }
|
|
631
|
+
int o = (d != -i)*((i div 2)+2) - 1;
|
|
632
|
+
int u = i+1;
|
|
633
|
+
int e = -1; i=u;
|
|
634
|
+
}
|
|
635
|
+
else //case: mindeg is nonnegative
|
|
636
|
+
{
|
|
637
|
+
while ( jet(c,i,v) == 0 ) { i = 2*(i+1); }
|
|
638
|
+
int o = i-1;
|
|
639
|
+
int u = (d != i)*((i div 2)-1);
|
|
640
|
+
int e = 1; i=u;
|
|
641
|
+
}
|
|
642
|
+
//----------------------- "quick search" for mindeg ------------------------
|
|
643
|
+
while ( (jet(c,i-1,v)==0)*(jet(c,i,v)!=0) == 0 )
|
|
644
|
+
{
|
|
645
|
+
i = (o+e+u) div 2;
|
|
646
|
+
if (jet(c,i,v)==0) { u = i+1; }
|
|
647
|
+
else { o = i-1; }
|
|
648
|
+
}
|
|
649
|
+
return(i);
|
|
650
|
+
}
|
|
651
|
+
//------------------------------ main program ---------------------------------
|
|
652
|
+
ideal M = simplify(ideal(matrix(id)),8); //delete scalar multiples from id
|
|
653
|
+
int c = ncols(M);
|
|
654
|
+
int i,n;
|
|
655
|
+
if( size(#)==0 )
|
|
656
|
+
{
|
|
657
|
+
int m = mindeg(M[c]);
|
|
658
|
+
for (i=c-1; i>0; i--)
|
|
659
|
+
{
|
|
660
|
+
n = mindeg(M[i]);
|
|
661
|
+
m = (m<=n)*m + (m>n)*n; //let m be the maximum of m and n
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
else
|
|
665
|
+
{
|
|
666
|
+
intvec v=#[1]; //weight vector for the variables
|
|
667
|
+
int m = findmindeg(M[c],v);
|
|
668
|
+
for (i=c-1; i>0; i--)
|
|
669
|
+
{
|
|
670
|
+
n = findmindeg(M[i],v);
|
|
671
|
+
m = (m<=n)*m + (m>n)*n; //let m be the maximum of m and n
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
return(m);
|
|
675
|
+
}
|
|
676
|
+
//-------------------------------- examples -----------------------------------
|
|
677
|
+
example
|
|
678
|
+
{ "EXAMPLE:"; echo = 2;
|
|
679
|
+
ring r = 0,(x,y,z),ls;
|
|
680
|
+
poly f = x5+y2+z3;
|
|
681
|
+
ord(f); // ord returns weighted order of leading term!
|
|
682
|
+
intvec v = 1,-3,2;
|
|
683
|
+
mindeg1(f,v); // computes minimal weighted degree
|
|
684
|
+
matrix m[2][2]=x10,1,0,f^2;
|
|
685
|
+
mindeg1(m,1..3); // computes absolute minimum of weighted degrees
|
|
686
|
+
}
|
|
687
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
688
|
+
|
|
689
|
+
proc normalize (def id)
|
|
690
|
+
"USAGE: normalize(id); id=poly/vector/ideal/module
|
|
691
|
+
RETURN: object of same type
|
|
692
|
+
each element is normalized with leading coefficient equal to 1
|
|
693
|
+
EXAMPLE: example normalize; shows an example
|
|
694
|
+
"
|
|
695
|
+
{
|
|
696
|
+
return(simplify(id,1));
|
|
697
|
+
}
|
|
698
|
+
//-------------------------------- examples -----------------------------------
|
|
699
|
+
example
|
|
700
|
+
{ "EXAMPLE:"; echo = 2;
|
|
701
|
+
ring r = 0,(x,y,z),ls;
|
|
702
|
+
poly f = 2x5+3y2+4z3;
|
|
703
|
+
normalize(f);
|
|
704
|
+
module m=[9xy,0,3z3],[4z,6y,2x];
|
|
705
|
+
normalize(m);
|
|
706
|
+
ring s = 0,(x,y,z),(c,ls);
|
|
707
|
+
module m=[9xy,0,3z3],[4z,6y,2x];
|
|
708
|
+
normalize(m);
|
|
709
|
+
}
|
|
710
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
711
|
+
|
|
712
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
713
|
+
// Input: <ideal>=<f1,f2,...,fm> and <polynomial> g
|
|
714
|
+
// Question: Does g lie in the radical of <ideal>?
|
|
715
|
+
// Solution: Compute a standard basis G for <f1,f2,...,fm,gz-1> where z is a
|
|
716
|
+
// new variable. Then g is contained in the radical of <ideal> <=>
|
|
717
|
+
// 1 is generator in G.
|
|
718
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
719
|
+
proc rad_con (poly g,ideal I)
|
|
720
|
+
"USAGE: rad_con(g,I); g polynomial, I ideal
|
|
721
|
+
RETURN: 1 (TRUE) (type int) if g is contained in the radical of I
|
|
722
|
+
@* 0 (FALSE) (type int) otherwise
|
|
723
|
+
EXAMPLE: example rad_con; shows an example
|
|
724
|
+
"
|
|
725
|
+
{ def br=basering;
|
|
726
|
+
int n=nvars(br);
|
|
727
|
+
int dB=degBound;
|
|
728
|
+
degBound=0;
|
|
729
|
+
string mp=string(minpoly);
|
|
730
|
+
if (attrib(br,"global")==1)
|
|
731
|
+
{
|
|
732
|
+
list l2;
|
|
733
|
+
for (int ii = 1; ii <= n; ii++)
|
|
734
|
+
{
|
|
735
|
+
l2[ii] = "@x("+string(ii)+")";
|
|
736
|
+
}
|
|
737
|
+
l2[n+1] = "@z";
|
|
738
|
+
ring R = create_ring(ring_list(br)[1], l2, "dp", "no_minpoly");
|
|
739
|
+
}
|
|
740
|
+
else
|
|
741
|
+
{
|
|
742
|
+
list l2 = "@z";
|
|
743
|
+
for (int ii = 1; ii <= n; ii++)
|
|
744
|
+
{
|
|
745
|
+
l2[ii+1] = "@x("+string(ii)+")";
|
|
746
|
+
}
|
|
747
|
+
ring R = create_ring(ring_list(br)[1], l2, "(dp(1),"+ordstr(br)+")", "no_minpoly");
|
|
748
|
+
}
|
|
749
|
+
if (mp!="0")
|
|
750
|
+
{
|
|
751
|
+
execute("minpoly=number("+mp+");");
|
|
752
|
+
}
|
|
753
|
+
ideal irrel=@x(1..n);
|
|
754
|
+
map f=br,irrel;
|
|
755
|
+
poly p=f(g);
|
|
756
|
+
ideal J=f(I),ideal(p*@z-1);
|
|
757
|
+
J=std(J);
|
|
758
|
+
degBound=dB;
|
|
759
|
+
if (J[1]==1)
|
|
760
|
+
{
|
|
761
|
+
setring br;
|
|
762
|
+
return(1);
|
|
763
|
+
}
|
|
764
|
+
else
|
|
765
|
+
{
|
|
766
|
+
setring br;
|
|
767
|
+
return(0);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
example
|
|
771
|
+
{ "EXAMPLE:"; echo=2;
|
|
772
|
+
ring R=0,(x,y,z),dp;
|
|
773
|
+
ideal I=x2+y2,z2;
|
|
774
|
+
poly f=x4+y4;
|
|
775
|
+
rad_con(f,I);
|
|
776
|
+
ideal J=x2+y2,z2,x4+y4;
|
|
777
|
+
poly g=z;
|
|
778
|
+
rad_con(g,I);
|
|
779
|
+
}
|
|
780
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
781
|
+
|
|
782
|
+
proc lcm (def id, list #)
|
|
783
|
+
"USAGE: lcm(p[,q]); p int/intvec q a list of integers or
|
|
784
|
+
p poly/ideal q a list of polynomials
|
|
785
|
+
RETURN: the least common multiple of p and q:
|
|
786
|
+
@* - of type int if p is an int/intvec
|
|
787
|
+
@* - of type poly if p is a poly/ideal
|
|
788
|
+
EXAMPLE: example lcm; shows an example
|
|
789
|
+
"
|
|
790
|
+
{
|
|
791
|
+
int k,j;
|
|
792
|
+
//------------------------------ integer case --------------------------------
|
|
793
|
+
if( typeof(id) == "int" or typeof(id) == "intvec" )
|
|
794
|
+
{
|
|
795
|
+
intvec i = id;
|
|
796
|
+
if (size(#)!=0)
|
|
797
|
+
{
|
|
798
|
+
for (j = 1; j<=size(#); j++)
|
|
799
|
+
{
|
|
800
|
+
if (typeof(#[j]) !="int" and typeof(#[j]) !="intvec")
|
|
801
|
+
{ ERROR("// ** list element must be an integer");}
|
|
802
|
+
else
|
|
803
|
+
{ i = i,#[j]; }
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
int p,q;
|
|
807
|
+
if( i == 0 )
|
|
808
|
+
{
|
|
809
|
+
return(0);
|
|
810
|
+
}
|
|
811
|
+
for(j=1;j<=size(i);j++)
|
|
812
|
+
{
|
|
813
|
+
if( i[j] != 0 )
|
|
814
|
+
{
|
|
815
|
+
p=i[j];
|
|
816
|
+
break;
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
for (k=j+1;k<=size(i);k++)
|
|
820
|
+
{
|
|
821
|
+
if( i[k] !=0)
|
|
822
|
+
{
|
|
823
|
+
q=gcd(p,i[k]);
|
|
824
|
+
p=p div q;
|
|
825
|
+
p=p*i[k];
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
if(p <0 )
|
|
829
|
+
{return(-p);}
|
|
830
|
+
return(p);
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
//----------------------------- polynomial case ------------------------------
|
|
834
|
+
if( typeof(id) == "poly" or typeof(id) == "ideal" )
|
|
835
|
+
{
|
|
836
|
+
ideal i = id;
|
|
837
|
+
if (size(#)!=0)
|
|
838
|
+
{
|
|
839
|
+
for (j = 1; j<=size(#); j++)
|
|
840
|
+
{
|
|
841
|
+
if (typeof(#[j]) !="poly" and typeof(#[j]) !="ideal"
|
|
842
|
+
and typeof(#[j]) !="int" and typeof(#[j]) !="intvec")
|
|
843
|
+
{ ERROR("// ** list element must be a polynomial");}
|
|
844
|
+
else
|
|
845
|
+
{ i = i,#[j]; }
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
poly p,q;
|
|
849
|
+
i=simplify(i,10);
|
|
850
|
+
if(size(i) == 0)
|
|
851
|
+
{
|
|
852
|
+
return(0);
|
|
853
|
+
}
|
|
854
|
+
for(j=1;j<=size(i);j++)
|
|
855
|
+
{
|
|
856
|
+
if(maxdeg(i[j])!= 0)
|
|
857
|
+
{
|
|
858
|
+
p=i[j];
|
|
859
|
+
break;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
if(p==0)
|
|
863
|
+
{
|
|
864
|
+
return(1);
|
|
865
|
+
}
|
|
866
|
+
for (k=j+1;k<=size(i);k++)
|
|
867
|
+
{
|
|
868
|
+
if(maxdeg(i[k])!=0)
|
|
869
|
+
{
|
|
870
|
+
q=gcd(p,i[k]);
|
|
871
|
+
if(maxdeg(q)==0)
|
|
872
|
+
{
|
|
873
|
+
p=p*i[k];
|
|
874
|
+
}
|
|
875
|
+
else
|
|
876
|
+
{
|
|
877
|
+
p=p/q;
|
|
878
|
+
p=p*i[k];
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
return(p);
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
example
|
|
886
|
+
{ "EXAMPLE:"; echo = 2;
|
|
887
|
+
ring r = 0,(x,y,z),lp;
|
|
888
|
+
poly p = (x+y)*(y+z);
|
|
889
|
+
poly q = (z4+2)*(y+z);
|
|
890
|
+
lcm(p,q);
|
|
891
|
+
ideal i=p,q,y+z;
|
|
892
|
+
lcm(i,p);
|
|
893
|
+
lcm(2,3,6);
|
|
894
|
+
lcm(2..6);
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
898
|
+
|
|
899
|
+
proc content(def f)
|
|
900
|
+
"USAGE: content(f); f polynomial/vector
|
|
901
|
+
RETURN: number, the content (greatest common factor of coefficients)
|
|
902
|
+
of the polynomial/vector f
|
|
903
|
+
SEE ALSO: cleardenom
|
|
904
|
+
EXAMPLE: example content; shows an example
|
|
905
|
+
"
|
|
906
|
+
{
|
|
907
|
+
if (f==0) { return(number(1)); }
|
|
908
|
+
return(leadcoef(f)/leadcoef(system("content",f)));
|
|
909
|
+
}
|
|
910
|
+
example
|
|
911
|
+
{ "EXAMPLE:"; echo = 2;
|
|
912
|
+
ring r=0,(x,y,z),(c,lp);
|
|
913
|
+
content(3x2+18xy-27xyz);
|
|
914
|
+
vector v=[3x2+18xy-27xyz,15x2+12y4,3];
|
|
915
|
+
content(v);
|
|
916
|
+
}
|
|
917
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
918
|
+
|
|
919
|
+
////////////////////////////////////////////////////////////////////////
|
|
920
|
+
// The idea of the procedures mod2id, id2mod and subrInterred is, to
|
|
921
|
+
// perform standard basis computation or interreduction of a submodule
|
|
922
|
+
// of a free module with generators gen(1),...,gen(n) over a ring R
|
|
923
|
+
// in a ring R[t1,...,tn]/<ti*tj> with gen(i) mapped to ti
|
|
924
|
+
////////////////////////////////////////////////////////////////////////
|
|
925
|
+
|
|
926
|
+
proc mod2id(matrix M,intvec vpos)
|
|
927
|
+
"USAGE: mod2id(M,vpos); M matrix, vpos intvec
|
|
928
|
+
ASSUME: vpos is an integer vector such that gen(i) corresponds
|
|
929
|
+
to var(vpos[i]).
|
|
930
|
+
The basering contains variables var(vpos[i]) which do not occur
|
|
931
|
+
in M.
|
|
932
|
+
RETURN: ideal I in which each gen(i) from the module is replaced by
|
|
933
|
+
var(vpos[i]) and all monomials var(vpos[i])*var(vpos[j]) have
|
|
934
|
+
been added to the generating set of I.
|
|
935
|
+
NOTE: This procedure should be used in the following situation:
|
|
936
|
+
one wants to pass to a ring with new variables, say e(1),..,e(s),
|
|
937
|
+
which correspond to the components gen(1),..,gen(s) of the
|
|
938
|
+
module M such that e(i)*e(j)=0 for all i,j.
|
|
939
|
+
The new ring should already exist and be the current ring
|
|
940
|
+
EXAMPLE: example mod2id; shows an example"
|
|
941
|
+
{
|
|
942
|
+
int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
|
|
943
|
+
//----------------------------------------------------------------------
|
|
944
|
+
// define the ideal generated by the var(vpos[i]) and set up the matrix
|
|
945
|
+
// for the multiplication
|
|
946
|
+
//----------------------------------------------------------------------
|
|
947
|
+
ideal vars=var(vpos[1]);
|
|
948
|
+
for(int i=2;i<=size(vpos);i++)
|
|
949
|
+
{
|
|
950
|
+
vars=vars,var(vpos[i]);
|
|
951
|
+
}
|
|
952
|
+
matrix varm[1][size(vpos)]=vars;
|
|
953
|
+
if (size(vpos) > nrows(M))
|
|
954
|
+
{
|
|
955
|
+
matrix Mt[size(vpos)][ncols(M)];
|
|
956
|
+
Mt[1..nrows(M),1..ncols(M)]=M;
|
|
957
|
+
kill M;
|
|
958
|
+
matrix M=Mt;
|
|
959
|
+
}
|
|
960
|
+
//----------------------------------------------------------------------
|
|
961
|
+
// define the desired ideal
|
|
962
|
+
//----------------------------------------------------------------------
|
|
963
|
+
ideal ret=vars^2,varm*M;
|
|
964
|
+
return(ret);
|
|
965
|
+
}
|
|
966
|
+
example
|
|
967
|
+
{ "EXAMPLE:"; echo=2;
|
|
968
|
+
ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
|
|
969
|
+
module mo=x*gen(1)+y*gen(2);
|
|
970
|
+
intvec iv=2,1;
|
|
971
|
+
mod2id(mo,iv);
|
|
972
|
+
}
|
|
973
|
+
////////////////////////////////////////////////////////////////////////
|
|
974
|
+
|
|
975
|
+
proc id2mod(ideal i,intvec vpos)
|
|
976
|
+
"USAGE: id2mod(I,vpos); I ideal, vpos intvec
|
|
977
|
+
RETURN: module corresponding to the ideal by replacing var(vpos[i]) by
|
|
978
|
+
gen(i) and omitting all generators var(vpos[i])*var(vpos[j])
|
|
979
|
+
NOTE: * This procedure only makes sense if the ideal contains
|
|
980
|
+
all var(vpos[i])*var(vpos[j]) as monomial generators and
|
|
981
|
+
all other generators of I are linear combinations of the
|
|
982
|
+
var(vpos[i]) over the ring in the other variables.
|
|
983
|
+
* This is the inverse procedure to mod2id and should be applied
|
|
984
|
+
only to ideals created by mod2id using the same intvec vpos
|
|
985
|
+
(possibly after a standard basis computation)
|
|
986
|
+
EXAMPLE: example id2mod; shows an example"
|
|
987
|
+
{
|
|
988
|
+
int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
|
|
989
|
+
//---------------------------------------------------------------------
|
|
990
|
+
// Initialization
|
|
991
|
+
//---------------------------------------------------------------------
|
|
992
|
+
int n=size(i);
|
|
993
|
+
int v=size(vpos);
|
|
994
|
+
matrix tempmat;
|
|
995
|
+
matrix mm[v][n];
|
|
996
|
+
//---------------------------------------------------------------------
|
|
997
|
+
// Conversion
|
|
998
|
+
//---------------------------------------------------------------------
|
|
999
|
+
for(int j=1;j<=v;j++)
|
|
1000
|
+
{
|
|
1001
|
+
tempmat=coeffs(i,var(vpos[j]));
|
|
1002
|
+
mm[j,1..n]=tempmat[2,1..n];
|
|
1003
|
+
}
|
|
1004
|
+
for(j=1;j<=v;j++)
|
|
1005
|
+
{
|
|
1006
|
+
mm=subst(mm,var(vpos[j]),0);
|
|
1007
|
+
}
|
|
1008
|
+
module ret=simplify(mm,10);
|
|
1009
|
+
return(ret);
|
|
1010
|
+
}
|
|
1011
|
+
example
|
|
1012
|
+
{ "EXAMPLE:"; echo=2;
|
|
1013
|
+
ring r=0,(e(1),e(2),x,y,z),(dp(2),ds(3));
|
|
1014
|
+
ideal i=e(2)^2,e(1)*e(2),e(1)^2,e(1)*y+e(2)*x;
|
|
1015
|
+
intvec iv=2,1;
|
|
1016
|
+
id2mod(i,iv);
|
|
1017
|
+
}
|
|
1018
|
+
///////////////////////////////////////////////////////////////////////
|
|
1019
|
+
|
|
1020
|
+
proc subrInterred(ideal mon, ideal sm, intvec iv)
|
|
1021
|
+
"USAGE: subrInterred(mon,sm,iv);
|
|
1022
|
+
sm: ideal in a ring r with n + s variables,
|
|
1023
|
+
e.g. x_1,..,x_n and t_1,..,t_s
|
|
1024
|
+
mon: ideal with monomial generators (not divisible by
|
|
1025
|
+
any of the t_i) such that sm is contained in the module
|
|
1026
|
+
k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]
|
|
1027
|
+
iv: intvec listing the variables which are supposed to be used
|
|
1028
|
+
as x_i
|
|
1029
|
+
RETURN: list l:
|
|
1030
|
+
l[1]=the monomials from mon in the order used
|
|
1031
|
+
l[2]=their coefficients after interreduction
|
|
1032
|
+
l[3]=l[1]*l[2]
|
|
1033
|
+
PURPOSE: Do interred only w.r.t. a subset of variables.
|
|
1034
|
+
The procedure returns an interreduced system of generators of
|
|
1035
|
+
sm considered as a k[t_1,..,t_s]-submodule of the free module
|
|
1036
|
+
k[t_1,..,t_s]*mon[1]+..+k[t_1,..,t_s]*mon[size(mon)]).
|
|
1037
|
+
EXAMPLE: example subrInterred; shows an example
|
|
1038
|
+
"
|
|
1039
|
+
{
|
|
1040
|
+
int p = printlevel-voice+3; // p=printlevel+1 (default: p=1)
|
|
1041
|
+
//-----------------------------------------------------------------------
|
|
1042
|
+
// check that mon is really generated by monomials
|
|
1043
|
+
// and sort its generators with respect to the monomial ordering
|
|
1044
|
+
//-----------------------------------------------------------------------
|
|
1045
|
+
int err;
|
|
1046
|
+
for(int i=1;i<=ncols(mon);i++)
|
|
1047
|
+
{
|
|
1048
|
+
if ( size(mon[i]) > 1 )
|
|
1049
|
+
{
|
|
1050
|
+
err=1;
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
if (err==1)
|
|
1054
|
+
{
|
|
1055
|
+
ERROR("mon has to be generated by monomials");
|
|
1056
|
+
}
|
|
1057
|
+
intvec sv=sortvec(mon);
|
|
1058
|
+
ideal mons;
|
|
1059
|
+
for(i=1;i<=size(sv);i++)
|
|
1060
|
+
{
|
|
1061
|
+
mons[i]=mon[sv[i]];
|
|
1062
|
+
}
|
|
1063
|
+
ideal itemp=maxideal(1);
|
|
1064
|
+
for(i=1;i<=size(iv);i++)
|
|
1065
|
+
{
|
|
1066
|
+
itemp=subst(itemp,var(iv[i]),0);
|
|
1067
|
+
}
|
|
1068
|
+
itemp=simplify(itemp,10);
|
|
1069
|
+
def r=basering;
|
|
1070
|
+
//-----------------------------------------------------------------------
|
|
1071
|
+
// express m in terms of the generators of mon and check whether m
|
|
1072
|
+
// can be considered as a submodule of k[t_1,..,t_n]*mon
|
|
1073
|
+
//-----------------------------------------------------------------------
|
|
1074
|
+
module motemp;
|
|
1075
|
+
motemp[ncols(sm)]=0;
|
|
1076
|
+
poly ptemp;
|
|
1077
|
+
int j;
|
|
1078
|
+
for(i=1;i<=ncols(mons);i++)
|
|
1079
|
+
{
|
|
1080
|
+
for(j=1;j<=ncols(sm);j++)
|
|
1081
|
+
{
|
|
1082
|
+
ptemp=sm[j]/mons[i];
|
|
1083
|
+
motemp[j]=motemp[j]+ptemp*gen(i);
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
for(i=1;i<=size(iv);i++)
|
|
1087
|
+
{
|
|
1088
|
+
motemp=subst(motemp,var(iv[i]),0);
|
|
1089
|
+
}
|
|
1090
|
+
matrix monmat[1][ncols(mons)]=mons;
|
|
1091
|
+
ideal dummy=monmat*motemp;
|
|
1092
|
+
for(i=1;i<=size(sm);i++)
|
|
1093
|
+
{
|
|
1094
|
+
if(sm[i]-dummy[i]!=0)
|
|
1095
|
+
{
|
|
1096
|
+
ERROR("the second argument is not a submodule of the assumed structure");
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
//----------------------------------------------------------------------
|
|
1100
|
+
// do the interreduction and convert back
|
|
1101
|
+
//----------------------------------------------------------------------
|
|
1102
|
+
ring rtemp = create_ring(ring_list(basering)[1], "(" + string(itemp)+ ")", "(C,dp)", "no_minpoly");
|
|
1103
|
+
def motemp=imap(r,motemp);
|
|
1104
|
+
intvec save=option(get);
|
|
1105
|
+
option(redSB);
|
|
1106
|
+
motemp=interred(motemp);
|
|
1107
|
+
option(set,save);
|
|
1108
|
+
setring r;
|
|
1109
|
+
kill motemp;
|
|
1110
|
+
def motemp=imap(rtemp,motemp);
|
|
1111
|
+
//list ret=monmat,motemp,monmat*motemp;
|
|
1112
|
+
module motemp2=motemp;
|
|
1113
|
+
for(i=1;i<=ncols(motemp2);i++)
|
|
1114
|
+
{
|
|
1115
|
+
motemp2[i]=cleardenom(motemp2[i]);
|
|
1116
|
+
}
|
|
1117
|
+
module motemp3=monmat*motemp;
|
|
1118
|
+
for(i=1;i<=ncols(motemp3);i++)
|
|
1119
|
+
{
|
|
1120
|
+
motemp3[i]=cleardenom(motemp3[i]);
|
|
1121
|
+
}
|
|
1122
|
+
list ret=monmat,motemp2,matrix(motemp3);
|
|
1123
|
+
return(ret);
|
|
1124
|
+
}
|
|
1125
|
+
example
|
|
1126
|
+
{ "EXAMPLE:"; echo=2;
|
|
1127
|
+
ring r=0,(x,y,z),dp;
|
|
1128
|
+
ideal i=x^2+x*y^2,x*y+x^2*y,z;
|
|
1129
|
+
ideal j=x^2+x*y^2,x*y,z;
|
|
1130
|
+
ideal mon=x^2,z,x*y;
|
|
1131
|
+
intvec iv=1,3;
|
|
1132
|
+
subrInterred(mon,i,iv);
|
|
1133
|
+
subrInterred(mon,j,iv);
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
1137
|
+
// moved here from nctools.lib
|
|
1138
|
+
// This procedure calculates the Newton diagram of the polynomial f
|
|
1139
|
+
// The output is a intmat M, each row of M is the exp of a monomial in f
|
|
1140
|
+
////////////////////////////////////////////////////////////////////////
|
|
1141
|
+
proc newtonDiag(poly f)
|
|
1142
|
+
"USAGE: newtonDiag(f); f a poly
|
|
1143
|
+
RETURN: intmat
|
|
1144
|
+
PURPOSE: compute the Newton diagram of f
|
|
1145
|
+
NOTE: each row is the exponent of a monomial of f
|
|
1146
|
+
EXAMPLE: example newtonDiag; shows examples
|
|
1147
|
+
"{
|
|
1148
|
+
int n = nvars(basering);
|
|
1149
|
+
intvec N=0;
|
|
1150
|
+
if ( f != 0 )
|
|
1151
|
+
{
|
|
1152
|
+
while ( f != 0 )
|
|
1153
|
+
{
|
|
1154
|
+
N = N, leadexp(f);
|
|
1155
|
+
f = f-lead(f);
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
else
|
|
1159
|
+
{
|
|
1160
|
+
N=N, leadexp(f);
|
|
1161
|
+
}
|
|
1162
|
+
N = N[2..size(N)]; // Deletes the zero added in the definition of T
|
|
1163
|
+
intmat M=intmat(N,(size(N) div n),n); // Conversion from vector to matrix
|
|
1164
|
+
return (M);
|
|
1165
|
+
}
|
|
1166
|
+
example
|
|
1167
|
+
{
|
|
1168
|
+
"EXAMPLE:";echo=2;
|
|
1169
|
+
ring r = 0,(x,y,z),lp;
|
|
1170
|
+
poly f = x2y+3xz-5y+3;
|
|
1171
|
+
newtonDiag(f);
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
////////////////////////////////////////////////////////////////////////
|