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,960 @@
|
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version purityfiltration.lib 4.1.2.0 Feb_2019 "; // $Id: b8b391a0e6cec7511a461c97eca28940fb9ffc55 $
|
|
3
|
+
category="Noncommutative";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: purityfiltration.lib Algorithms for computing a purity filtration of a given module
|
|
6
|
+
|
|
7
|
+
AUTHORS: Christian Schilli, christian.schilli@rwth-aachen.de
|
|
8
|
+
@* Viktor Levandovskyy, levandov@math.rwth-aachen.de
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
OVERVIEW:
|
|
12
|
+
Purity is a notion with several meanings. In our context it is equidimensionality
|
|
13
|
+
@* of a module (that is all M is pure iff any nonzero submodule of N has the same dimension as N).
|
|
14
|
+
@* Notably, one should define purity with respect to a given dimension function. In the context
|
|
15
|
+
@* of this library the corresponding function is the homological grade number j_A(M) of a module M over
|
|
16
|
+
@* an K-algebra A. j_A(M) is the minimal integer k, such that Ext^k_A(M,A) != 0.
|
|
17
|
+
|
|
18
|
+
REFERENCES: [AQ] Alban Quadrat: Grade filtration of linear functional systems, INRIA Report 7769 (2010), to appear in Acta Applicanda Mathematica.
|
|
19
|
+
@* [B93] Jan-Erik Bjoerk: Analytic D-modules and applications, Kluwer Acad. Publ., 1993.
|
|
20
|
+
@* [MB10] Mohamed Barakat: Purity Filtration and the Fine Structure of Autonomy. Proc. MTNS, 2010.
|
|
21
|
+
|
|
22
|
+
PROCEDURES:
|
|
23
|
+
projectiveDimension(matrix T,int i); compute a shortest resolution of coker(T) and its projective dimension
|
|
24
|
+
purityFiltration(matrix R); compute the purity filtration of coker(R)
|
|
25
|
+
purityTriang(matrix R) compute a triangular blockmatrix T, such that coker(R) isomorphic to coker(T)
|
|
26
|
+
gradeNumber(matrix R); gives the grade number of the module coker(R)
|
|
27
|
+
showgrades(list T); gives all grade numbers of the modules represented by the elements of T
|
|
28
|
+
allExtOfLeft(matrix R); computes all right ext-modules ext^i(M,D) of a left module M=coker(R) over the ring D
|
|
29
|
+
allExtOfRight(matrix R); computes all left ext-modules ext^i(M,D) of a right module M=coker(R) over the ring D
|
|
30
|
+
doubleExt(matrix R, int i); computes the left module ext^i(ext^i(M,D),D) over the ring D, M=coker(R)
|
|
31
|
+
allDoubleExt(matrix R); computes all double ext modules ext^i(ext^j(M,D),D) of the left module coker(R) over the ring D
|
|
32
|
+
is_pure(matrix R); checks whether the module coker(R) is pure
|
|
33
|
+
purelist(list T); checks whether all the modules represented by the elements of T are pure
|
|
34
|
+
|
|
35
|
+
KEYWORDS: D-module; ext-module; filtration; projective dimension; resolution; purity
|
|
36
|
+
";
|
|
37
|
+
|
|
38
|
+
LIB "nctools.lib";
|
|
39
|
+
LIB "matrix.lib";
|
|
40
|
+
LIB "polylib.lib";
|
|
41
|
+
LIB "general.lib";
|
|
42
|
+
LIB "control.lib";
|
|
43
|
+
LIB "nchomolog.lib";
|
|
44
|
+
|
|
45
|
+
//------------------- auxiliary procedures --------------------------
|
|
46
|
+
|
|
47
|
+
proc testPurityfiltrationLib()
|
|
48
|
+
{
|
|
49
|
+
example projectiveDimension;
|
|
50
|
+
example purityFiltration;
|
|
51
|
+
example purityTriang;
|
|
52
|
+
example gradeNumber;
|
|
53
|
+
example showgrades;
|
|
54
|
+
example allExtOfLeft;
|
|
55
|
+
example allExtOfRight;
|
|
56
|
+
example doubleExt;
|
|
57
|
+
example allDoubleExt;
|
|
58
|
+
example is_pure;
|
|
59
|
+
example purelist;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
static proc iszero (matrix R)
|
|
63
|
+
"USAGE: iszero(R); R a matrix
|
|
64
|
+
RETURN: int, 1, if R is zero,
|
|
65
|
+
@* or 0, if it's not
|
|
66
|
+
PURPOSE: checks, if the matrix R is zero or not
|
|
67
|
+
"
|
|
68
|
+
{
|
|
69
|
+
ideal i=R;
|
|
70
|
+
i=std(i);
|
|
71
|
+
if (i==0)
|
|
72
|
+
{
|
|
73
|
+
return (1);
|
|
74
|
+
}
|
|
75
|
+
return (0);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
proc lsyz (matrix R)
|
|
79
|
+
"USAGE: lsyz(R), R a matrix
|
|
80
|
+
RETURN: matrix, a left syzygy of R
|
|
81
|
+
PURPOSE: computes the left syzygy module of the module, generated by the rows of R, i.e.
|
|
82
|
+
@* a matrix X with X*R=0
|
|
83
|
+
"
|
|
84
|
+
{
|
|
85
|
+
matrix L=transpose(syz(transpose(R)));
|
|
86
|
+
return(L);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
proc rsyz (matrix R)
|
|
90
|
+
"USAGE: rsyz(R), R a matrix
|
|
91
|
+
RETURN: matrix, a rightsyzygy of R
|
|
92
|
+
PURPOSE: computes the right syzygy module of the module, generated by the rows of R, i.e.
|
|
93
|
+
@* a matrix X with R*X=0
|
|
94
|
+
EXAMPLE: example rsyz; shows example
|
|
95
|
+
"
|
|
96
|
+
{
|
|
97
|
+
def save = basering; // with respect to non-commutative rings,
|
|
98
|
+
def saveop = opposite(save); // we have to switch to the oppose ring for a rightsyzygy
|
|
99
|
+
setring saveop;
|
|
100
|
+
matrix Rop = oppose(save,R);
|
|
101
|
+
matrix Bop = syz(Rop);
|
|
102
|
+
setring save;
|
|
103
|
+
matrix B =oppose(saveop,Bop);
|
|
104
|
+
kill saveop;
|
|
105
|
+
return(B);
|
|
106
|
+
}
|
|
107
|
+
example
|
|
108
|
+
{"EXAMPLE:";echo = 2;
|
|
109
|
+
ring D = 0,(x,y,z),dp;
|
|
110
|
+
matrix R[3][2]=x,0,0,x,y,-z;
|
|
111
|
+
matrix X=rsyz(R);
|
|
112
|
+
print(X);
|
|
113
|
+
// check
|
|
114
|
+
print(R*X);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
static proc rinv (matrix R)
|
|
119
|
+
"USAGE: rinv(R), R a matrix
|
|
120
|
+
RETURN: matrix, a right inverse of R
|
|
121
|
+
PURPOSE: computes a right inverse matrix of R, if it exists
|
|
122
|
+
@* if not, it returns the zero matrix
|
|
123
|
+
"
|
|
124
|
+
{
|
|
125
|
+
return(rightInverse(R));
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
static proc linv (matrix R)
|
|
129
|
+
"USAGE: linv(R), R a matrix
|
|
130
|
+
RETURN: matrix, a left inverse of R
|
|
131
|
+
PURPOSE: computes a left inverse matrix of R, if it exists
|
|
132
|
+
@* if not, it returns the zero matrix
|
|
133
|
+
"
|
|
134
|
+
{
|
|
135
|
+
return (leftInverse(R));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
proc rlift(matrix M, matrix N)
|
|
139
|
+
"USAGE: rlift(M,N), M and N matrices, so that the module, generated by the columns of N
|
|
140
|
+
@* is a submodule of the one, generated by the columns of M
|
|
141
|
+
RETURN: matrix, a right lift of N in M
|
|
142
|
+
PURPOSE: computes a right lift matrix X of N in M,
|
|
143
|
+
@* i.e. N=M*X
|
|
144
|
+
"
|
|
145
|
+
{
|
|
146
|
+
def save = basering; // with respect to non-commutative rings,
|
|
147
|
+
def saveop = opposite(save); // we have to change the ring for a rightlift
|
|
148
|
+
setring saveop;
|
|
149
|
+
matrix Mop = oppose(save,M);
|
|
150
|
+
matrix Nop = oppose(save,N);
|
|
151
|
+
matrix Bop = lift(Mop,Nop);
|
|
152
|
+
setring save;
|
|
153
|
+
matrix B =oppose(saveop,Bop);
|
|
154
|
+
kill saveop;
|
|
155
|
+
return(B);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
proc llift(matrix M, matrix N)
|
|
159
|
+
"USAGE: llift(M,N), M and N matrices, so that the module, generated by the rows of N
|
|
160
|
+
@* is a submodule of the one, generated by the rows of M
|
|
161
|
+
RETURN: matrix, a left lift of N in M
|
|
162
|
+
PURPOSE: computes a left lift matrix X of N in M,
|
|
163
|
+
@* i.e. N=X*M
|
|
164
|
+
"
|
|
165
|
+
{
|
|
166
|
+
matrix X=transpose(lift(transpose(M),transpose(N)));
|
|
167
|
+
return(X);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
static proc concatz(matrix M, matrix N)
|
|
171
|
+
"USAGE: concatz(M,N), M and N matrices
|
|
172
|
+
RETURN: matrix
|
|
173
|
+
PURPOSE: adds the rows of N under the rows of M, i.e. build the matrix (M^Tr,N^Tr)^Tr
|
|
174
|
+
"
|
|
175
|
+
{
|
|
176
|
+
matrix X=transpose(concat(transpose(M),transpose(N)));
|
|
177
|
+
return (X);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
//------------------------- main procedures --------------------------
|
|
181
|
+
|
|
182
|
+
proc purityFiltration(matrix R)
|
|
183
|
+
"USAGE: purityFiltration(S), S matrix with entries of an Auslander regular ring D
|
|
184
|
+
RETURN: a list T of two lists, purity filtration of the module M=D^q/D^p(S^t)
|
|
185
|
+
PURPOSE: the first list T[1] gives a filtration {M_i} of M,
|
|
186
|
+
@* where the i-th entry of T[1] gives the representation matrix of M_(i-1).
|
|
187
|
+
@* the second list T[2] gives representations of the factor Modules,
|
|
188
|
+
@* i.e. T[2][i] gives the repr. matrix for M_(i-1)/M_i
|
|
189
|
+
EXAMPLE: example purityFiltration; shows example
|
|
190
|
+
"
|
|
191
|
+
{
|
|
192
|
+
int i,j;
|
|
193
|
+
list re=projectiveDimension(R,0);
|
|
194
|
+
list T=re[1];
|
|
195
|
+
int di=re[2];
|
|
196
|
+
list reres; // Rji=reres[i][j+1], i=1,..,n+1; j=0,..,i
|
|
197
|
+
for( i=1; i<=di+1; i++ )
|
|
198
|
+
{
|
|
199
|
+
list zw;
|
|
200
|
+
zw[i+1]=T[i];
|
|
201
|
+
for( j=i; j >= 1; j--)
|
|
202
|
+
{
|
|
203
|
+
zw[j]=rsyz(zw[j+1]);
|
|
204
|
+
}
|
|
205
|
+
reres[i]=zw;
|
|
206
|
+
kill zw;
|
|
207
|
+
}
|
|
208
|
+
list F; // Fij=F[j][i+1], j=2,..,n+1; i=0,..,j-1
|
|
209
|
+
for(i=2;i<=di;i++)
|
|
210
|
+
{
|
|
211
|
+
list ehm;
|
|
212
|
+
matrix I[nrows(T[i-1])][nrows(T[i-1])];
|
|
213
|
+
I=I+1;
|
|
214
|
+
ehm[i]=I;
|
|
215
|
+
kill I;
|
|
216
|
+
for (j=1; j<=i-1; j++)
|
|
217
|
+
{
|
|
218
|
+
ehm[i-j]=rlift(reres[i][i-j+1],ehm[i-j+1]*reres[i-1][i-j+1]);
|
|
219
|
+
}
|
|
220
|
+
F[i]=ehm;
|
|
221
|
+
kill ehm;
|
|
222
|
+
}
|
|
223
|
+
// list M; // Mi=M[i+1], i=0,...,n+1
|
|
224
|
+
// M[1]=R1;
|
|
225
|
+
// matrix Ti=lsyz(reres[1][1]);
|
|
226
|
+
// matrix P[ncols(Ti)][ncols(Ti)];
|
|
227
|
+
// P=P+1;
|
|
228
|
+
// for (i=1;i<=di; i++)
|
|
229
|
+
// {
|
|
230
|
+
// M[i+1]=transpose(modulo(transpose(Ti*P),transpose(reres[i][2])));
|
|
231
|
+
// P=F[i+1][1]*P;
|
|
232
|
+
// Ti=lsyz(reres[i+1][1]);
|
|
233
|
+
// }
|
|
234
|
+
// M[di+2]=transpose(modulo(transpose(Ti*P),transpose(reres[di+1][2])));
|
|
235
|
+
// list I;
|
|
236
|
+
// for (i=1;i<=di+1;i++)
|
|
237
|
+
// {
|
|
238
|
+
// I[i]=transpose(modulo(transpose(M[i]),transpose(M[i+1])));
|
|
239
|
+
// }
|
|
240
|
+
list Rs,Rss;
|
|
241
|
+
for(i=1; i<=di; i++)
|
|
242
|
+
{
|
|
243
|
+
list zw;
|
|
244
|
+
zw[1]=lsyz(reres[i][1]);
|
|
245
|
+
zw[2]=lsyz(zw[1]);
|
|
246
|
+
Rss[i]=llift(zw[1],reres[i][2]);
|
|
247
|
+
Rs[i]=zw;
|
|
248
|
+
kill zw;
|
|
249
|
+
}
|
|
250
|
+
list Fs;
|
|
251
|
+
for(i=2;i<=di;i++)
|
|
252
|
+
{
|
|
253
|
+
Fs[i]=llift(Rs[i-1][1],Rs[i][1]*F[i][1]);
|
|
254
|
+
}
|
|
255
|
+
list K,U;
|
|
256
|
+
K[1]=transpose(R);
|
|
257
|
+
U[1]=Rs[1][1];
|
|
258
|
+
for(i=2;i<=di;i++)
|
|
259
|
+
{
|
|
260
|
+
K[i]=transpose(std(transpose(concatz(Rss[i-1], Rs[i-1][2]))));
|
|
261
|
+
U[i]=transpose(std(transpose(concatz(concatz(Fs[i],Rss[i-1]),Rs[i-1][2]))));
|
|
262
|
+
}
|
|
263
|
+
K[di+1]=transpose(std(transpose(concatz(Rss[di], Rs[di][2]))));
|
|
264
|
+
U[di+1]=K[di+1];
|
|
265
|
+
list erg=(K,U);
|
|
266
|
+
return (erg);
|
|
267
|
+
}
|
|
268
|
+
example
|
|
269
|
+
{"EXAMPLE:";echo = 2;
|
|
270
|
+
ring D = 0,(x1,x2,d1,d2),dp;
|
|
271
|
+
def S=Weyl();
|
|
272
|
+
setring S;
|
|
273
|
+
int i;
|
|
274
|
+
matrix R[3][3]=0,d2-d1,d2-d1,d2,-d1,-d1-d2,d1,-d1,-2*d1;
|
|
275
|
+
print(R);
|
|
276
|
+
list T=purityFiltration(transpose(R));
|
|
277
|
+
// the purity filtration of coker(M)
|
|
278
|
+
print(T[1][1]);
|
|
279
|
+
print(T[1][2]);
|
|
280
|
+
print(T[1][3]);
|
|
281
|
+
// factor modules of the filtration
|
|
282
|
+
print(T[2][1]);
|
|
283
|
+
print(T[2][2]);
|
|
284
|
+
print(T[2][3]);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
proc purityTriang(matrix R)
|
|
289
|
+
"USAGE: purityTriang(S), S matrix with entries of an Auslander regular ring D
|
|
290
|
+
RETURN: a matrix T
|
|
291
|
+
PURPOSE: compute a triangular block matrix T, such that M=D^p/D^q(S^t) is isomorphic to M'=D^p'/D^q(T^t)
|
|
292
|
+
EXAMPLE: example purityTriang; shows example
|
|
293
|
+
"
|
|
294
|
+
{
|
|
295
|
+
int i,j;
|
|
296
|
+
list re=projectiveDimension(R,0);
|
|
297
|
+
list T=re[1];
|
|
298
|
+
int di=re[2];
|
|
299
|
+
list reres; // Rji=reres[i][j+1], i=1,..,n+1; j=0,..,i
|
|
300
|
+
for( i=1; i<=di+1; i++ )
|
|
301
|
+
{
|
|
302
|
+
list zw;
|
|
303
|
+
zw[i+1]=T[i];
|
|
304
|
+
for( j=i; j >= 1; j--)
|
|
305
|
+
{
|
|
306
|
+
zw[j]=rsyz(zw[j+1]);
|
|
307
|
+
}
|
|
308
|
+
reres[i]=zw;
|
|
309
|
+
kill zw;
|
|
310
|
+
}
|
|
311
|
+
list F; // Fij=F[j][i+1], j=2,..,n+1; i=0,..,j-1
|
|
312
|
+
for(i=2;i<=di;i++)
|
|
313
|
+
{
|
|
314
|
+
list ehm;
|
|
315
|
+
matrix I[nrows(T[i-1])][nrows(T[i-1])];
|
|
316
|
+
I=I+1;
|
|
317
|
+
ehm[i]=I;
|
|
318
|
+
kill I;
|
|
319
|
+
for (j=1; j<=i-1; j++)
|
|
320
|
+
{
|
|
321
|
+
ehm[i-j]=rlift(reres[i][i-j+1],ehm[i-j+1]*reres[i-1][i-j+1]);
|
|
322
|
+
}
|
|
323
|
+
F[i]=ehm;
|
|
324
|
+
kill ehm;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
list Rs,Rss;
|
|
328
|
+
for(i=1; i<=di; i++)
|
|
329
|
+
{
|
|
330
|
+
list zw;
|
|
331
|
+
zw[1]=lsyz(reres[i][1]);
|
|
332
|
+
zw[2]=lsyz(zw[1]);
|
|
333
|
+
Rss[i]=llift(zw[1],reres[i][2]);
|
|
334
|
+
Rs[i]=zw;
|
|
335
|
+
kill zw;
|
|
336
|
+
}
|
|
337
|
+
list Fs;
|
|
338
|
+
for(i=2;i<=di;i++)
|
|
339
|
+
{
|
|
340
|
+
Fs[i]=llift(Rs[i-1][1],Rs[i][1]*F[i][1]);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
int sp; list spnr;
|
|
345
|
+
spnr[1]=ncols(Rs[1][1]);
|
|
346
|
+
for (i=2;i<=di;i++)
|
|
347
|
+
{
|
|
348
|
+
spnr[i]=ncols(Fs[i]);
|
|
349
|
+
}
|
|
350
|
+
spnr[di+1]=ncols(Rss[di]);
|
|
351
|
+
sp=sum(spnr);
|
|
352
|
+
|
|
353
|
+
matrix E[nrows(Rs[1][1])][nrows(Rs[1][1])]; E=E-1;
|
|
354
|
+
list Z; int sumh;
|
|
355
|
+
Z[1]=concat(Rs[1][1],E);
|
|
356
|
+
sumh=ncols(Rs[1][1]);
|
|
357
|
+
kill E;
|
|
358
|
+
|
|
359
|
+
for(i=2;i<=di;i++)
|
|
360
|
+
{
|
|
361
|
+
matrix A;
|
|
362
|
+
matrix B[1][sumh];
|
|
363
|
+
matrix E[nrows(Fs[i])][nrows(Fs[i])]; E=E-1;
|
|
364
|
+
|
|
365
|
+
A=Fs[i];
|
|
366
|
+
if (i>2)
|
|
367
|
+
{
|
|
368
|
+
if (iszero(Rss[i-1])==0)
|
|
369
|
+
{
|
|
370
|
+
A=concatz(A,Rss[i-1]);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
if (iszero(Rs[i-1][2])==0)
|
|
374
|
+
{
|
|
375
|
+
A=concatz(A,Rs[i-1][2]);
|
|
376
|
+
}
|
|
377
|
+
A=concat(B,A,E);
|
|
378
|
+
Z[i]=A;
|
|
379
|
+
sumh=sumh+spnr[i];
|
|
380
|
+
kill A,B,E;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
matrix hi,his;
|
|
385
|
+
matrix N[1][sumh];
|
|
386
|
+
|
|
387
|
+
if (iszero(Rss[di])==0)
|
|
388
|
+
{
|
|
389
|
+
hi=concat(N,Rss[di]);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (iszero(Rs[di][2])==0)
|
|
393
|
+
{
|
|
394
|
+
his=concat(N,Rs[di][2]);
|
|
395
|
+
if (iszero(hi)==1)
|
|
396
|
+
{
|
|
397
|
+
hi=his;
|
|
398
|
+
}
|
|
399
|
+
if (iszero(hi)==0)
|
|
400
|
+
{
|
|
401
|
+
hi=concatz(hi,his);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
kill his;
|
|
406
|
+
|
|
407
|
+
matrix ges=Z[1];
|
|
408
|
+
for (i=2;i<=di;i++)
|
|
409
|
+
{
|
|
410
|
+
ges = concatz(ges,Z[i]);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
if (iszero(hi)==0)
|
|
414
|
+
{
|
|
415
|
+
ges=concatz(ges,hi);
|
|
416
|
+
}
|
|
417
|
+
return (ges);
|
|
418
|
+
}
|
|
419
|
+
example
|
|
420
|
+
{"EXAMPLE:";echo = 2;
|
|
421
|
+
ring D = 0,(x1,x2,d1,d2),dp;
|
|
422
|
+
def S=Weyl();
|
|
423
|
+
setring S;
|
|
424
|
+
int i;
|
|
425
|
+
matrix R[3][3]=0,d2-d1,d2-d1,d2,-d1,-d1-d2,d1,-d1,-2*d1;
|
|
426
|
+
print(R);
|
|
427
|
+
matrix T=purityTriang(transpose(R));
|
|
428
|
+
// a triangular blockmatrix representing the module coker(R)
|
|
429
|
+
print(T);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
proc gradeNumber(matrix R)
|
|
434
|
+
"USAGE: gradeNumber(R), R matrix, representing M=D^p/D^q(R^t) over a ring D
|
|
435
|
+
RETURN: int, grade number of M
|
|
436
|
+
PURPOSE: computes the grade number of M, i.e. the first i, with ext^i(M,D) !=0
|
|
437
|
+
@* returns -1 if M=0
|
|
438
|
+
EXAMPLE: example gradeNumber; shows examples
|
|
439
|
+
"
|
|
440
|
+
{
|
|
441
|
+
matrix M=transpose(R);
|
|
442
|
+
if (is_zero(transpose(M))==1)
|
|
443
|
+
{
|
|
444
|
+
return (-1);
|
|
445
|
+
}
|
|
446
|
+
list ext = allExtOfLeft(transpose(M));
|
|
447
|
+
int i=1;
|
|
448
|
+
matrix L=ext[i];
|
|
449
|
+
while (is_zero(transpose(L))==1)
|
|
450
|
+
{
|
|
451
|
+
i=i+1;
|
|
452
|
+
L=ext[i];
|
|
453
|
+
}
|
|
454
|
+
return (i-1);
|
|
455
|
+
}
|
|
456
|
+
example
|
|
457
|
+
{"EXAMPLE:";echo = 2;
|
|
458
|
+
// trivial example
|
|
459
|
+
ring D=0,(x,y,z),dp;
|
|
460
|
+
matrix R[2][1]=1,x;
|
|
461
|
+
gradeNumber(R);
|
|
462
|
+
// R has left inverse, so M=D/D^2R=0
|
|
463
|
+
gradeNumber(transpose(R));
|
|
464
|
+
print(ncExt_R(0,R));
|
|
465
|
+
// so, ext^0(coker(R),D) =! 0)
|
|
466
|
+
//
|
|
467
|
+
// a little bit more complex
|
|
468
|
+
matrix R1[3][1]=x,-y,z;
|
|
469
|
+
gradeNumber(transpose(R1));
|
|
470
|
+
print(ncExt_R(0,transpose(R1)));
|
|
471
|
+
print(ncExt_R(1,transpose(R1)));
|
|
472
|
+
print(ncExt_R(2,transpose(R1)));
|
|
473
|
+
// ext^i are zero for i=0,1,2
|
|
474
|
+
matrix ext3=ncExt_R(3,transpose(R1));
|
|
475
|
+
print(ext3);
|
|
476
|
+
// not zero
|
|
477
|
+
is_zero(ext3);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
proc allExtOfLeft(matrix Ps)
|
|
481
|
+
"USAGE: allExtOfLeft(M),
|
|
482
|
+
RETURN: list, entries are ext-modules
|
|
483
|
+
ASSUME: M presents a left module of finite left projective dimension n
|
|
484
|
+
PURPOSE: For a left module presented by M over the basering D,
|
|
485
|
+
@* compute a list T, whose entry T[i+1] is a matrix, presenting the right module Ext^i_D(M,D) for i=0..n
|
|
486
|
+
EXAMPLE: example allExtOfLeft; shows example
|
|
487
|
+
"
|
|
488
|
+
{
|
|
489
|
+
// old doc: ... T[i] gives the repr. matrix of ext^(i-1)(M,D), i=1,.., n+1
|
|
490
|
+
list ext, Phi;
|
|
491
|
+
ext[1]=ncHom_R(Ps);
|
|
492
|
+
Phi = mres(Ps,0);
|
|
493
|
+
int di = size(Phi);
|
|
494
|
+
Phi[di+1]= transpose(lsyz(transpose(Phi[di])));
|
|
495
|
+
int i;
|
|
496
|
+
def Rbase = basering;
|
|
497
|
+
for(i=1;i<=di;i++)
|
|
498
|
+
{
|
|
499
|
+
module f = transpose(matrix(Phi[i+1]));
|
|
500
|
+
module Im2 = transpose(matrix(Phi[i]));
|
|
501
|
+
def Rop = opposite(Rbase);
|
|
502
|
+
setring Rop;
|
|
503
|
+
module fop = oppose(Rbase,f);
|
|
504
|
+
module Im2op = oppose(Rbase,Im2);
|
|
505
|
+
module ker_op = modulo(fop,std(0));
|
|
506
|
+
module ext_op = modulo(ker_op,Im2op);
|
|
507
|
+
setring Rbase;
|
|
508
|
+
ext[i+1] = oppose(Rop,ext_op); // a right module!
|
|
509
|
+
kill f, Im2, Rop;
|
|
510
|
+
}
|
|
511
|
+
return(ext);
|
|
512
|
+
}
|
|
513
|
+
example
|
|
514
|
+
{"EXAMPLE:";echo = 2;
|
|
515
|
+
ring D = 0,(x,y,z),dp;
|
|
516
|
+
matrix R[6][4]=
|
|
517
|
+
0,-2*x,z-2*y-x,-1,
|
|
518
|
+
0,z-2*x,2*y-3*x,1,
|
|
519
|
+
z,-6*x,-2*y-5*x,-1,
|
|
520
|
+
0,y-x,y-x,0,
|
|
521
|
+
y,-x,-y-x,0,
|
|
522
|
+
x,-x,-2*x,0;
|
|
523
|
+
// coker(R) consider the left module M=D^6/D^4R
|
|
524
|
+
list T=allExtOfLeft(transpose(R));
|
|
525
|
+
print(T[1]);
|
|
526
|
+
print(T[2]);
|
|
527
|
+
print(T[3]);
|
|
528
|
+
print(T[4]);
|
|
529
|
+
// right modules coker(T[i].)!!
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
proc allExtOfRight(matrix Ps)
|
|
533
|
+
"USAGE: allExtOfRight(R), R matrix representing the right Module M=D^q/RD^p over a ring D
|
|
534
|
+
@* M module with finite right projective dimension n
|
|
535
|
+
RETURN: list, entries are ext-modules
|
|
536
|
+
PURPOSE: computes a list T, which entries are representations of the left modules ext^i(M,D)
|
|
537
|
+
@* T[i] gives the repr. matrix of ext^(i-1)(M,D), i=1,..,n+1
|
|
538
|
+
EXAMPLE: example allExtOfRight; shows example
|
|
539
|
+
"
|
|
540
|
+
{
|
|
541
|
+
// matrix Ps=transpose(Y);
|
|
542
|
+
list ext, Phi;
|
|
543
|
+
def Rbase = basering;
|
|
544
|
+
def Rop = opposite(Rbase);
|
|
545
|
+
setring Rop;
|
|
546
|
+
matrix Psop=oppose(Rbase,Ps);
|
|
547
|
+
matrix ext1_op = ncHom_R(Psop);
|
|
548
|
+
setring Rbase;
|
|
549
|
+
ext[1]=oppose(Rop,ext1_op);
|
|
550
|
+
kill Rop;
|
|
551
|
+
list zw = rightreso(transpose(Ps)); // right resolution
|
|
552
|
+
int di = size(zw);
|
|
553
|
+
zw[di+1]=lsyz(zw[di]);
|
|
554
|
+
Phi = zw;
|
|
555
|
+
kill zw;
|
|
556
|
+
int i;
|
|
557
|
+
for(i=1;i<=di;i++)
|
|
558
|
+
{
|
|
559
|
+
module f = Phi[i+1];
|
|
560
|
+
module Im2 = Phi[i];
|
|
561
|
+
module ker = modulo(f,std(0));
|
|
562
|
+
ext[i+1] = modulo(ker,Im2); // a left module!
|
|
563
|
+
kill f, Im2, ker;
|
|
564
|
+
}
|
|
565
|
+
return(ext);
|
|
566
|
+
}
|
|
567
|
+
example
|
|
568
|
+
{"EXAMPLE:";echo = 2;
|
|
569
|
+
ring D = 0,(x,y,z),dp;
|
|
570
|
+
matrix R[6][4]=
|
|
571
|
+
0,-2*x,z-2*y-x,-1,
|
|
572
|
+
0,z-2*x,2*y-3*x,1,
|
|
573
|
+
z,-6*x,-2*y-5*x,-1,
|
|
574
|
+
0,y-x,y-x,0,
|
|
575
|
+
y,-x,-y-x,0,
|
|
576
|
+
x,-x,-2*x,0;
|
|
577
|
+
// coker(R) considered as right module
|
|
578
|
+
projectiveDimension(R,1)[2];
|
|
579
|
+
list T=allExtOfRight(R);
|
|
580
|
+
print(T[1]);
|
|
581
|
+
print(T[2]);
|
|
582
|
+
// left modules coker(.T[i])!!
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
static proc rightreso(matrix T)
|
|
586
|
+
"USAGE: rightreso(T), T matrix representing the right module M=D*/TD*
|
|
587
|
+
RETURN: list L, a right resolution of M
|
|
588
|
+
PURPOSE: computes a right resolution of M, using mres
|
|
589
|
+
@* the i-th entry of L gives the (i-1)th right syzygy module of M
|
|
590
|
+
"
|
|
591
|
+
{
|
|
592
|
+
int j;
|
|
593
|
+
matrix M=transpose(T);
|
|
594
|
+
list res;
|
|
595
|
+
def save = basering; // with respect to non-commutative rings,
|
|
596
|
+
def saveop = opposite(save); // we have to change the ring for a rightresolution
|
|
597
|
+
setring saveop;
|
|
598
|
+
matrix Mop=oppose(save,M);
|
|
599
|
+
list aufl=mres(Mop,0);
|
|
600
|
+
list resop=aufl;
|
|
601
|
+
kill aufl;
|
|
602
|
+
for (j=1; j<=size(resop); j++)
|
|
603
|
+
{
|
|
604
|
+
matrix zw=resop[j];
|
|
605
|
+
setring save;
|
|
606
|
+
res[j]=transpose(oppose(saveop,zw));
|
|
607
|
+
setring saveop;
|
|
608
|
+
kill zw;
|
|
609
|
+
}
|
|
610
|
+
setring save;
|
|
611
|
+
kill saveop;
|
|
612
|
+
return(res);
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
proc showgrades(list T)
|
|
616
|
+
"USAGE: showgrades(T), T list, which includes representation matrices of modules
|
|
617
|
+
RETURN: list, gradenumbers of the entries in T
|
|
618
|
+
PURPOSE: computes a list L with L[i]=gradenumber(M), M=D^p/D^qT[i]
|
|
619
|
+
EXAMPLE: example showgrades; shows example
|
|
620
|
+
"
|
|
621
|
+
{
|
|
622
|
+
list grades;
|
|
623
|
+
int gr=size(T);
|
|
624
|
+
int i;
|
|
625
|
+
for (i=1;i<=gr;i++)
|
|
626
|
+
{
|
|
627
|
+
grades[i]=gradeNumber(transpose(T[i]));
|
|
628
|
+
}
|
|
629
|
+
return (grades);
|
|
630
|
+
}
|
|
631
|
+
example
|
|
632
|
+
{"EXAMPLE:";echo = 2;
|
|
633
|
+
ring D = 0,(x,y,z),dp;
|
|
634
|
+
matrix R[6][4]=
|
|
635
|
+
0,-2*x,z-2*y-x,-1,
|
|
636
|
+
0,z-2*x,2*y-3*x,1,
|
|
637
|
+
z,-6*x,-2*y-5*x,-1,
|
|
638
|
+
0,y-x,y-x,0,
|
|
639
|
+
y,-x,-y-x,0,
|
|
640
|
+
x,-x,-2*x,0;
|
|
641
|
+
list T=purityFiltration(transpose(R))[2];
|
|
642
|
+
showgrades(T);
|
|
643
|
+
// T[i] are i-1 pure (i=1,3,4) or zero (i=2)
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
proc doubleExt(matrix R, int i)
|
|
647
|
+
"USAGE: doubleExt(R,i), R matrix representing the left Module M=D^p/D^q(R^t) over a ring D
|
|
648
|
+
@* int i, less or equal the left projective dimension of M
|
|
649
|
+
RETURN: matrix P, representing the double ext module
|
|
650
|
+
PURPOSE: computes a matrix P, which represents the left module ext^i(ext^i(M,D))
|
|
651
|
+
EXAMPLE: example doubleExt; shows example
|
|
652
|
+
"
|
|
653
|
+
{
|
|
654
|
+
return (allExtOfRight( allExtOfLeft(R)[i+1] )[i+1]);
|
|
655
|
+
}
|
|
656
|
+
example
|
|
657
|
+
{"EXAMPLE:";echo = 2;
|
|
658
|
+
ring D = 0,(x,y,z),dp;
|
|
659
|
+
matrix R[7][3]=
|
|
660
|
+
0 ,0,1,
|
|
661
|
+
1 ,-4*x+z,-z,
|
|
662
|
+
-1,8*x-2*z,z,
|
|
663
|
+
1 ,0 ,0,
|
|
664
|
+
0 ,x-y,0,
|
|
665
|
+
0 ,x-y,y,
|
|
666
|
+
0 ,0 ,x;
|
|
667
|
+
// coker(R) is 2-pure, so all doubleExt are zero
|
|
668
|
+
print(doubleExt(transpose(R),0));
|
|
669
|
+
print(doubleExt(transpose(R),1));
|
|
670
|
+
print(doubleExt(transpose(R),3));
|
|
671
|
+
// except of the second
|
|
672
|
+
print(doubleExt(transpose(R),2));
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
proc allDoubleExt(matrix R)
|
|
676
|
+
"USAGE: allDoubleExt(R), R matrix representing the left Module M=D^p/D^q(R^t) over a ring D
|
|
677
|
+
RETURN: list T, double indexed, which include all double-ext modules
|
|
678
|
+
PURPOSE: computes all double ext-modules
|
|
679
|
+
@* T[i][j] gives a representation matrix of ext^(j-1)(ext(i-1)(M,D))
|
|
680
|
+
EXAMPLE: example allDoubleExt; shows example
|
|
681
|
+
"
|
|
682
|
+
{
|
|
683
|
+
list ext=allExtOfLeft(transpose(R));
|
|
684
|
+
list extext;
|
|
685
|
+
int i;
|
|
686
|
+
for(i=1;i<=size(ext);i++)
|
|
687
|
+
{
|
|
688
|
+
extext[i]=allExtOfRight(ext[i]);
|
|
689
|
+
}
|
|
690
|
+
kill ext;
|
|
691
|
+
return (extext);
|
|
692
|
+
}
|
|
693
|
+
example
|
|
694
|
+
{"EXAMPLE:";echo = 2;
|
|
695
|
+
ring D = 0,(x1,x2,x3,d1,d2,d3),dp;
|
|
696
|
+
def S=Weyl();
|
|
697
|
+
setring S;
|
|
698
|
+
matrix R[6][4]=
|
|
699
|
+
0,-2*d1,d3-2*d2-d1,-1,
|
|
700
|
+
0,d3-2*d1,2*d2-3*d1,1,
|
|
701
|
+
d3,-6*d1,-2*d2-5*d1,-1,
|
|
702
|
+
0,d2-d1,d2-d1,0,
|
|
703
|
+
d2,-d1,-d2-d1,0,
|
|
704
|
+
d1,-d1,-2*d1,0;
|
|
705
|
+
list T=allDoubleExt(transpose(R));
|
|
706
|
+
// left projective dimension of M=coker(R) is 3
|
|
707
|
+
// ext^i(ext^0(M,D)), i=0,1,2,3
|
|
708
|
+
print(T[1][1]);
|
|
709
|
+
print(T[1][2]);
|
|
710
|
+
print(T[1][3]);
|
|
711
|
+
print(T[1][4]);
|
|
712
|
+
// ext^i(ext^1(M,D)), i=0,1,2,3
|
|
713
|
+
print(T[2][1]);
|
|
714
|
+
print(T[2][2]);
|
|
715
|
+
print(T[2][3]);
|
|
716
|
+
print(T[2][4]);
|
|
717
|
+
// ext^i(ext^2(M,D)), i=0,1,2,3 (all zero)
|
|
718
|
+
print(T[3][1]);
|
|
719
|
+
print(T[3][2]);
|
|
720
|
+
print(T[3][3]);
|
|
721
|
+
print(T[3][4]);
|
|
722
|
+
// ext^i(ext^3(M,D)), i=0,1,2,3 (all zero)
|
|
723
|
+
print(T[4][1]);
|
|
724
|
+
print(T[4][2]);
|
|
725
|
+
print(T[4][3]);
|
|
726
|
+
print(T[4][4]);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
proc is_pure(matrix R)
|
|
730
|
+
"USAGE: is_pure(R), R representing the module M=D^p/D^q(R^t)
|
|
731
|
+
RETURN: int, 0 or 1
|
|
732
|
+
PURPOSE: checks pureness of M.
|
|
733
|
+
@* returns 1, if M is pure, or 0, if it's not
|
|
734
|
+
@* remark: if M is zero, is_pure returns 1
|
|
735
|
+
EXAMPLE: example is_pure; shows example
|
|
736
|
+
"
|
|
737
|
+
{
|
|
738
|
+
matrix M=transpose(R);
|
|
739
|
+
int gr=gradeNumber(transpose(M));
|
|
740
|
+
int di=projectiveDimension(transpose(M),0)[2];
|
|
741
|
+
int i=0;
|
|
742
|
+
while(i<=di)
|
|
743
|
+
{
|
|
744
|
+
if (i!=gr)
|
|
745
|
+
{
|
|
746
|
+
if ( is_zero( doubleExt(transpose(M),i) ) == 0 )
|
|
747
|
+
{
|
|
748
|
+
return (0);
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
i=i+1;
|
|
752
|
+
}
|
|
753
|
+
return (1);
|
|
754
|
+
}
|
|
755
|
+
example
|
|
756
|
+
{"EXAMPLE:";echo = 2;
|
|
757
|
+
ring D = 0,(x,y,z),dp;
|
|
758
|
+
matrix R[3][2]=y,-z,x,0,0,x;
|
|
759
|
+
list T=purityFiltration(transpose(R));
|
|
760
|
+
print(transpose(std(transpose(T[2][2]))));
|
|
761
|
+
// so the purity filtration of coker(R) is trivial,
|
|
762
|
+
// i.e. coker(R) is already pure
|
|
763
|
+
is_pure(transpose(R));
|
|
764
|
+
// we can also have non-pure modules:
|
|
765
|
+
matrix R2[6][4]=
|
|
766
|
+
0,-2*x,z-2*y-x,-1,
|
|
767
|
+
0,z-2*x,2*y-3*x,1,
|
|
768
|
+
z,-6*x,-2*y-5*x,-1,
|
|
769
|
+
0,y-x,y-x,0,
|
|
770
|
+
y,-x,-y-x,0,
|
|
771
|
+
x,-x,-2*x,0;
|
|
772
|
+
is_pure(transpose(R2));
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
proc purelist(list T)
|
|
776
|
+
"USAGE: purelist(T), T list, in which the i-th entry R=T[i] represents M=D^p/D^q(R^t)
|
|
777
|
+
RETURN: list M, entries of M are 0 or 1
|
|
778
|
+
PURPOSE: if T[i] is pure, M[i] is 1, else M[i] is 0
|
|
779
|
+
EXAMPLE: example purelist; shows example
|
|
780
|
+
"
|
|
781
|
+
{
|
|
782
|
+
int i;
|
|
783
|
+
list erg;
|
|
784
|
+
for(i=1;i<=size(T);i++)
|
|
785
|
+
{
|
|
786
|
+
erg[i]=is_pure(transpose(T[i]));
|
|
787
|
+
}
|
|
788
|
+
return (erg);
|
|
789
|
+
}
|
|
790
|
+
example
|
|
791
|
+
{"EXAMPLE:";echo = 2;
|
|
792
|
+
ring D = 0,(x,y,z),dp;
|
|
793
|
+
matrix R[6][4]=
|
|
794
|
+
0,-2*x,z-2*y-x,-1,
|
|
795
|
+
0,z-2*x,2*y-3*x,1,
|
|
796
|
+
z,-6*x,-2*y-5*x,-1,
|
|
797
|
+
0,y-x,y-x,0,
|
|
798
|
+
y,-x,-y-x,0,
|
|
799
|
+
x,-x,-2*x,0;
|
|
800
|
+
is_pure(transpose(R));
|
|
801
|
+
// R is not pure, so we do the purity filtration
|
|
802
|
+
list T=purityFiltration(transpose(R));
|
|
803
|
+
// all Elements of T[2] are either zero or pure
|
|
804
|
+
purelist(T[2]);
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
proc projectiveDimension(matrix T, list #)
|
|
809
|
+
"USAGE: projectiveDimension(R,i,j), R matrix representing the Modul M=coker(R)
|
|
810
|
+
@* int i, with i=0 or i=1, j a natural number
|
|
811
|
+
RETURN: list T, a projective resolution of M and its projective dimension
|
|
812
|
+
PURPOSE: if i=0 (and by default), T[1] gives a shortest left resolution of M=D^p/D^q(R^t) and T[2] the left projective dimension of M
|
|
813
|
+
@* if i=1, T[1] gives a shortest right resolution of M=D^p/RD^q and T[2] the right projective dimension of M
|
|
814
|
+
@* in both cases T[1][j] is the (j-1)-th syzygy module of M
|
|
815
|
+
NOTE: The algorithm is due to A. Quadrat, D. Robertz, Computation of bases of free modules over the Weyl algebras, J.Symb.Comp. 42, 2007.
|
|
816
|
+
EXAMPLE: example projectiveDimension; shows examples
|
|
817
|
+
"
|
|
818
|
+
{
|
|
819
|
+
int i = 0; // default
|
|
820
|
+
if (size(#) >0)
|
|
821
|
+
{
|
|
822
|
+
i = int(#[1]);
|
|
823
|
+
if ( (i!=0) and (i!=1) )
|
|
824
|
+
{
|
|
825
|
+
printf("Unaccepted second argument. Use 0 to get a left resolution, 1 for a right one.");
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
if (i==0)
|
|
829
|
+
{
|
|
830
|
+
return(prodim(T));
|
|
831
|
+
}
|
|
832
|
+
int j;
|
|
833
|
+
matrix M=T;
|
|
834
|
+
list res;
|
|
835
|
+
def save = basering; // with respect to non-commutative rings,
|
|
836
|
+
def saveop = opposite(save); // we have to change the ring for a rightresolution
|
|
837
|
+
setring saveop;
|
|
838
|
+
matrix Mop=oppose(save,M);
|
|
839
|
+
list aufl=prodim(Mop);
|
|
840
|
+
int k=aufl[2];
|
|
841
|
+
list resop=aufl[1];
|
|
842
|
+
kill aufl;
|
|
843
|
+
for (j=1; j<=size(resop); j++)
|
|
844
|
+
{
|
|
845
|
+
matrix zw=resop[j];
|
|
846
|
+
setring save;
|
|
847
|
+
res[j]=transpose(oppose(saveop,zw));
|
|
848
|
+
setring saveop;
|
|
849
|
+
kill zw;
|
|
850
|
+
}
|
|
851
|
+
setring save;
|
|
852
|
+
list Y;
|
|
853
|
+
Y[1]=res;
|
|
854
|
+
Y[2]=k;
|
|
855
|
+
kill saveop;
|
|
856
|
+
kill res;
|
|
857
|
+
return(Y);
|
|
858
|
+
|
|
859
|
+
}
|
|
860
|
+
example
|
|
861
|
+
{"EXAMPLE:";echo = 2;
|
|
862
|
+
// commutative example
|
|
863
|
+
ring D = 0,(x,y,z),dp;
|
|
864
|
+
matrix R[6][4]=
|
|
865
|
+
0,-2*x,z-2*y-x,-1,
|
|
866
|
+
0,z-2*x,2*y-3*x,1,
|
|
867
|
+
z,-6*x,-2*y-5*x,-1,
|
|
868
|
+
0,y-x,y-x,0,
|
|
869
|
+
y,-x,-y-x,0,
|
|
870
|
+
x,-x,-2*x,0;
|
|
871
|
+
// compute a left resolution of M=D^4/D^6*R
|
|
872
|
+
list T=projectiveDimension(transpose(R),0);
|
|
873
|
+
// so we have the left projective dimension
|
|
874
|
+
T[2];
|
|
875
|
+
//we could also compute a right resolution of M=D^6/RD^4
|
|
876
|
+
list T1=projectiveDimension(R,1);
|
|
877
|
+
// and we have right projective dimension
|
|
878
|
+
T1[2];
|
|
879
|
+
// check, that a syzygy matrix of R has left inverse:
|
|
880
|
+
print(leftInverse(syz(R)));
|
|
881
|
+
// so lpd(M) must be 1.
|
|
882
|
+
// Non-commutative example
|
|
883
|
+
ring D1 = 0,(x1,x2,x3,d1,d2,d3),dp;
|
|
884
|
+
def S=Weyl(); setring S;
|
|
885
|
+
matrix R[3][3]=
|
|
886
|
+
1/2*x2*d1, x2*d2+1, x2*d3+1/2*d1,
|
|
887
|
+
-1/2*x2*d2-3/2,0,1/2*d2,
|
|
888
|
+
-d1-1/2*x2*d3,-d2,-1/2*d3;
|
|
889
|
+
list T=projectiveDimension(R,0);
|
|
890
|
+
// left projective dimension of coker(R) is
|
|
891
|
+
T[2];
|
|
892
|
+
list T1=projectiveDimension(R,1);
|
|
893
|
+
// both modules have the same projective dimension, but different resolutions, because D is non-commutative
|
|
894
|
+
print(T[1][1]);
|
|
895
|
+
// not the same as
|
|
896
|
+
print(transpose(T1[1][1]));
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
static proc prodim(matrix M)
|
|
900
|
+
"USAGE: prodim(R), R matrix representing the Modul M=coker(R)
|
|
901
|
+
RETURN: list T, a left projective resolution of M and its left projective dimension
|
|
902
|
+
PURPOSE: T[1] gives a shortest left resolution of M and T[2] the left projective dimension of M
|
|
903
|
+
@* it is T[1][j] the (j-1)-th syzygy module of M
|
|
904
|
+
"
|
|
905
|
+
{
|
|
906
|
+
matrix T=transpose(M);
|
|
907
|
+
list R,zw;
|
|
908
|
+
R[1]=T;
|
|
909
|
+
if (rinv(R[1])==0)
|
|
910
|
+
{
|
|
911
|
+
R[2]=transpose(std(transpose(lsyz(R[1]))));
|
|
912
|
+
}
|
|
913
|
+
else
|
|
914
|
+
{
|
|
915
|
+
matrix S[1][ncols(T)];
|
|
916
|
+
R[1]=S;
|
|
917
|
+
zw[1]=R;
|
|
918
|
+
zw[2]=0;
|
|
919
|
+
return (zw);
|
|
920
|
+
}
|
|
921
|
+
if (iszero(R[2])==1)
|
|
922
|
+
{
|
|
923
|
+
zw[1]=R;
|
|
924
|
+
zw[2]=1;
|
|
925
|
+
return (zw);
|
|
926
|
+
}
|
|
927
|
+
int i=1;
|
|
928
|
+
matrix N;
|
|
929
|
+
while (iszero(R[i+1])==0)
|
|
930
|
+
{
|
|
931
|
+
i=i+1;
|
|
932
|
+
N=rinv(R[i]);
|
|
933
|
+
if (iszero(N)==0)
|
|
934
|
+
{
|
|
935
|
+
if (i==2)
|
|
936
|
+
{
|
|
937
|
+
R[i-1]=concat(R[i-1],N);
|
|
938
|
+
matrix K[1][nrows(R[1])];
|
|
939
|
+
R[2]=K;
|
|
940
|
+
zw[1]=R;
|
|
941
|
+
zw[2]=i-1;
|
|
942
|
+
return (zw);
|
|
943
|
+
}
|
|
944
|
+
if (i>2)
|
|
945
|
+
{
|
|
946
|
+
R[i-1]=concat(R[i-1],N);
|
|
947
|
+
matrix K[ncols(N)][1];
|
|
948
|
+
R[i-2]=concatz(R[i-2],K);
|
|
949
|
+
R[i]=0;
|
|
950
|
+
zw[1]=R;
|
|
951
|
+
zw[2]=i-1;
|
|
952
|
+
return(zw);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
R[i+1]=transpose(std(transpose(lsyz(R[i]))));
|
|
956
|
+
}
|
|
957
|
+
zw[1]=R;
|
|
958
|
+
zw[2]=i;
|
|
959
|
+
return (zw);
|
|
960
|
+
}
|