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,1666 @@
|
|
|
1
|
+
////////////////////////////////////////////////////////////////
|
|
2
|
+
version="version fpalgebras.lib 4.1.2.0 Feb_2019 "; // $Id: 2ca3d9e326543222e30cb11db59d6bffbcea308a $
|
|
3
|
+
category="Noncommutative";
|
|
4
|
+
info="
|
|
5
|
+
LIBRARY: fpalgebras.lib Definitions of some finitely presented algebras and groups (Letterplace)
|
|
6
|
+
AUTHORS: Karim Abou Zeid, karim.abou.zeid at rwth-aachen.de@*
|
|
7
|
+
Viktor Levandovskyy, viktor.levandovskyy at math.rwth-aachen.de@*
|
|
8
|
+
Grischa Studzinski, grischa.studzinski at rwth-aachen.de
|
|
9
|
+
|
|
10
|
+
Support: Project II.6 in the transregional collaborative research centre
|
|
11
|
+
SFB-TRR 195 'Symbolic Tools in Mathematics and their Application' of the German DFG
|
|
12
|
+
|
|
13
|
+
OVERVIEW:
|
|
14
|
+
Generation of various algebras, including group algebras of finitely presented groups in the Letterplace ring.
|
|
15
|
+
FPA stands for finitely presented algebra.
|
|
16
|
+
|
|
17
|
+
KEYWORDS: free associative algebra; finitely presented algebra; finitely presented group; Serre relations
|
|
18
|
+
|
|
19
|
+
PROCEDURES:
|
|
20
|
+
operatorAlgebra(string a, int d); description of some common algebras of operators
|
|
21
|
+
serreRelations(A,z); compute the homogeneous part of Serre's relations associated to a generalized Cartan matrix A
|
|
22
|
+
fullSerreRelations(A,N,C,P,d); compute the ideal of all Serre's relations associated to a generalized Cartan matrix A
|
|
23
|
+
ademRelations(i,j); compute the ideal of Adem relations for i<2j in char 0
|
|
24
|
+
baumslagSolitar(int n, int m, int d, list #);
|
|
25
|
+
baumslagGroup(int m, int n, int d);
|
|
26
|
+
crystallographicGroupP1(int d);
|
|
27
|
+
crystallographicGroupPM(int d);
|
|
28
|
+
crystallographicGroupPG(int d);
|
|
29
|
+
crystallographicGroupP2MM(int d);
|
|
30
|
+
crystallographicGroupP2(int d);
|
|
31
|
+
crystallographicGroupP2GG(int d);
|
|
32
|
+
crystallographicGroupCM(int d);
|
|
33
|
+
crystallographicGroupC2MM(int d);
|
|
34
|
+
crystallographicGroupP4(int d);
|
|
35
|
+
crystallographicGroupP4MM(int d);
|
|
36
|
+
crystallographicGroupP4GM(int d);
|
|
37
|
+
crystallographicGroupP3(int d);
|
|
38
|
+
crystallographicGroupP31M(int d);
|
|
39
|
+
crystallographicGroupP3M1(int d);
|
|
40
|
+
crystallographicGroupP6(int d);
|
|
41
|
+
crystallographicGroupP6MM(int d);
|
|
42
|
+
dyckGroup1(int n, int d, intvec P);
|
|
43
|
+
dyckGroup2(int n, int d, intvec P);
|
|
44
|
+
dyckGroup3(int n, int d, intvec P);
|
|
45
|
+
fibonacciGroup(int m, int d);
|
|
46
|
+
tetrahedronGroup(int g, int d);
|
|
47
|
+
triangularGroup(int g, int d);
|
|
48
|
+
|
|
49
|
+
SEE ALSO: freegb_lib, fpadim_lib, fpaprops_lib, LETTERPLACE
|
|
50
|
+
";
|
|
51
|
+
|
|
52
|
+
LIB "freegb.lib";
|
|
53
|
+
LIB "general.lib";
|
|
54
|
+
////////////////////////////////////////////////////////////////////
|
|
55
|
+
|
|
56
|
+
/* very fast and cheap test of consistency and functionality
|
|
57
|
+
DO NOT make it static !
|
|
58
|
+
after adding the new proc, add it here */
|
|
59
|
+
proc tstfpalgebras()
|
|
60
|
+
{
|
|
61
|
+
example operatorAlgebra;
|
|
62
|
+
example serreRelations;
|
|
63
|
+
example fullSerreRelations;
|
|
64
|
+
example ademRelations;
|
|
65
|
+
example baumslagSolitar;
|
|
66
|
+
example baumslagGroup;
|
|
67
|
+
example dyckGroup1;
|
|
68
|
+
example dyckGroup2;
|
|
69
|
+
example dyckGroup3;
|
|
70
|
+
example fibonacciGroup;
|
|
71
|
+
example tetrahedronGroup;
|
|
72
|
+
example triangularGroup;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// Serre and Adem
|
|
76
|
+
proc serreRelations(intmat A, int zu)
|
|
77
|
+
"USAGE: serreRelations(A,z); A an intmat, z an int
|
|
78
|
+
RETURN: ideal
|
|
79
|
+
ASSUME: basering has a letterplace ring structure and
|
|
80
|
+
A is a generalized Cartan matrix with integer entries
|
|
81
|
+
PURPOSE: compute the ideal of Serre's relations associated to A
|
|
82
|
+
EXAMPLE: example serreRelations; shows examples
|
|
83
|
+
"
|
|
84
|
+
{
|
|
85
|
+
// zu = 1 -> with commutators [f_i,f_j]; zu == 0 without them
|
|
86
|
+
// suppose that A is cartan matrix
|
|
87
|
+
// then Serre's relations are
|
|
88
|
+
// (ad f_j)^{1-A_{ij}} ( f_i)
|
|
89
|
+
int ppl = printlevel-voice+2;
|
|
90
|
+
int n = ncols(A); // hence n variables
|
|
91
|
+
int i,j,k,el;
|
|
92
|
+
poly p,q;
|
|
93
|
+
ideal I;
|
|
94
|
+
for (i=1; i<=n; i++)
|
|
95
|
+
{
|
|
96
|
+
for (j=1; j<=n; j++)
|
|
97
|
+
{
|
|
98
|
+
el = 1 - A[i,j];
|
|
99
|
+
// printf("i:%s, j: %s, l: %s",i,j,l);
|
|
100
|
+
dbprint(ppl,"i, j, l: ",i,j,el);
|
|
101
|
+
// if ((i!=j) && (l >0))
|
|
102
|
+
// if ( (i!=j) && ( ((zu ==0) && (l >=2)) || ((zu ==1) && (l >=1)) ) )
|
|
103
|
+
if ((i!=j) && (el >0))
|
|
104
|
+
{
|
|
105
|
+
q = lieBracket(var(j),var(i));
|
|
106
|
+
dbprint(ppl,"first bracket: ",q);
|
|
107
|
+
// if (l >=2)
|
|
108
|
+
// {
|
|
109
|
+
for (k=1; k<=el-1; k++)
|
|
110
|
+
{
|
|
111
|
+
q = lieBracket(var(j),q);
|
|
112
|
+
dbprint(ppl,"further bracket:",q);
|
|
113
|
+
}
|
|
114
|
+
// }
|
|
115
|
+
}
|
|
116
|
+
if (q!=0) { I = I,q; q=0;}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
I = simplify(I,2);
|
|
120
|
+
return(I);
|
|
121
|
+
}
|
|
122
|
+
example
|
|
123
|
+
{
|
|
124
|
+
"EXAMPLE:"; echo = 2;
|
|
125
|
+
intmat A[3][3] =
|
|
126
|
+
2, -1, 0,
|
|
127
|
+
-1, 2, -3,
|
|
128
|
+
0, -1, 2; // G^1_2 Cartan matrix
|
|
129
|
+
ring r = 0,(f1,f2,f3),dp;
|
|
130
|
+
int uptodeg = 5;
|
|
131
|
+
def R = freeAlgebra(r, uptodeg);
|
|
132
|
+
setring R;
|
|
133
|
+
ideal I = serreRelations(A,1); I = simplify(I,1+2+8);
|
|
134
|
+
I;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* setup for older example:
|
|
138
|
+
intmat A[2][2] = 2, -1, -1, 2; // sl_3 == A_2
|
|
139
|
+
ring r = 0,(f1,f2),dp;
|
|
140
|
+
int uptodeg = 5; int lV = 2;
|
|
141
|
+
*/
|
|
142
|
+
|
|
143
|
+
proc fullSerreRelations(intmat A, ideal rNegative, ideal rCartan, ideal rPositive, int uptodeg)
|
|
144
|
+
"USAGE: fullSerreRelations(A,N,C,P,d); A an intmat, N,C,P ideals, d an int
|
|
145
|
+
RETURN: ring (and ideal)
|
|
146
|
+
PURPOSE: compute the inhomogeneous Serre's relations associated to A in given
|
|
147
|
+
variable names
|
|
148
|
+
ASSUME: three ideals in the input are of the same sizes and contain merely
|
|
149
|
+
variables which are interpreted as follows: N resp. P stand for negative
|
|
150
|
+
resp. positive roots, C stand for Cartan elements. d is the degree bound for
|
|
151
|
+
letterplace ring, which will be returned.
|
|
152
|
+
The matrix A is a generalized Cartan matrix with integer entries
|
|
153
|
+
The result is the ideal called 'fsRel' in the returned ring.
|
|
154
|
+
EXAMPLE: example fullSerreRelations; shows examples
|
|
155
|
+
"
|
|
156
|
+
{
|
|
157
|
+
/* SerreRels on rNeg and rPos plus Cartans etc. */
|
|
158
|
+
int ppl = printlevel -voice+2;
|
|
159
|
+
/* ideals must be written in variables: assume each term is of degree 1 */
|
|
160
|
+
int i,j,k;
|
|
161
|
+
int N = nvars(basering);
|
|
162
|
+
def save = basering;
|
|
163
|
+
int comFlag = 0;
|
|
164
|
+
/* assume: (size(rNegative) == size(rPositive)) */
|
|
165
|
+
/* assume: (size(rNegative) == size(rCartan)) i.e. nonsimple Cartans */
|
|
166
|
+
if ( (size(rNegative) != size(rPositive)) || (size(rNegative) != size(rCartan)) )
|
|
167
|
+
{
|
|
168
|
+
ERROR("All input ideals must be of the same size");
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// if (size(rNegative) != size(rPositive))
|
|
172
|
+
// {
|
|
173
|
+
// ERROR("The 1st and the 3rd input ideals must be of the same size");
|
|
174
|
+
// }
|
|
175
|
+
|
|
176
|
+
/* assume: 2*size(rNegative) + size(rCartan) >= nvars(basering) */
|
|
177
|
+
i = 2*size(rNegative) + size(rCartan);
|
|
178
|
+
if (i>N)
|
|
179
|
+
{
|
|
180
|
+
string s1="The total number of elements in input ideals";
|
|
181
|
+
string s2="must not exceed the dimension of the ground ring";
|
|
182
|
+
ERROR(s1+s2);
|
|
183
|
+
}
|
|
184
|
+
if (i < N)
|
|
185
|
+
{
|
|
186
|
+
comFlag = N-i; // so many elements will commute
|
|
187
|
+
"Warning: some elements will be treated as mutually commuting";
|
|
188
|
+
}
|
|
189
|
+
/* extract varnames from input ideals */
|
|
190
|
+
intvec iNeg = varIdeal2intvec(rNegative);
|
|
191
|
+
intvec iCartan = varIdeal2intvec(rCartan);
|
|
192
|
+
intvec iPos = varIdeal2intvec(rPositive);
|
|
193
|
+
/* for each vector in rNeg and rPositive, go into the corr. ring and create SerreRels */
|
|
194
|
+
/* rNegative: */
|
|
195
|
+
list L = ringlist(save);
|
|
196
|
+
def LPsave = freeAlgebra(basering, uptodeg); setring save;
|
|
197
|
+
list LNEG = L; list tmp;
|
|
198
|
+
/* L[1] field as is; L[2] vars: a subset; L[3] ordering: dp, L[4] as is */
|
|
199
|
+
for (i=1; i<=size(iNeg); i++)
|
|
200
|
+
{
|
|
201
|
+
tmp[i] = string(var(iNeg[i]));
|
|
202
|
+
}
|
|
203
|
+
LNEG[2] = tmp; LNEG[3] = list(list("dp",intvec(1:size(iNeg))), list("C",0));
|
|
204
|
+
def RNEG = ring(LNEG); setring RNEG;
|
|
205
|
+
def RRNEG = freeAlgebra(basering, uptodeg);
|
|
206
|
+
setring RRNEG;
|
|
207
|
+
ideal I = serreRelations(A,1); I = simplify(I,1+2+8);
|
|
208
|
+
setring LPsave;
|
|
209
|
+
ideal srNeg = imap(RRNEG,I);
|
|
210
|
+
dbprint(ppl,"0-1 ideal of negative relations is ready");
|
|
211
|
+
dbprint(ppl-1,srNeg);
|
|
212
|
+
setring save; kill L,tmp,RRNEG,RNEG, LNEG;
|
|
213
|
+
/* rPositive: */
|
|
214
|
+
list L = ringlist(save);
|
|
215
|
+
list LPOS = L; list tmp;
|
|
216
|
+
/* L[1] field as is; L[2] vars: a subset; L[3] ordering: dp, L[4] as is */
|
|
217
|
+
for (i=1; i<=size(iPos); i++)
|
|
218
|
+
{
|
|
219
|
+
tmp[i] = string(var(iPos[i]));
|
|
220
|
+
}
|
|
221
|
+
LPOS[2] = tmp; LPOS[3] = list(list("dp",intvec(1:size(iPos))), list("C",0));
|
|
222
|
+
def RPOS = ring(LPOS); setring RPOS;
|
|
223
|
+
def RRPOS = freeAlgebra(basering, uptodeg);
|
|
224
|
+
setring RRPOS;
|
|
225
|
+
ideal I = serreRelations(A,1); I = simplify(I,1+2+8);
|
|
226
|
+
setring LPsave;
|
|
227
|
+
ideal srPos = imap(RRPOS,I);
|
|
228
|
+
dbprint(ppl,"0-2 ideal of positive relations is ready");
|
|
229
|
+
dbprint(ppl-1,srPos);
|
|
230
|
+
setring save; kill L,tmp,RRPOS,RPOS, LPOS;
|
|
231
|
+
string sMap = "ideal Mmap =";
|
|
232
|
+
for (i=1; i<=nvars(save); i++)
|
|
233
|
+
{
|
|
234
|
+
sMap = sMap + string(var(i))+",";
|
|
235
|
+
}
|
|
236
|
+
sMap[size(sMap)] = ";";
|
|
237
|
+
/* cartans: h_j h_i = h_i h_j */
|
|
238
|
+
setring LPsave;
|
|
239
|
+
ideal ComCartan;
|
|
240
|
+
for (i=1; i<size(iCartan); i++)
|
|
241
|
+
{
|
|
242
|
+
for (j=i+1; j<=size(iCartan); j++)
|
|
243
|
+
{
|
|
244
|
+
ComCartan = ComCartan + lieBracket(var(iCartan[j]),var(iCartan[i]));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
ComCartan = simplify(ComCartan,1+2+8);
|
|
248
|
+
execute(sMap); // defines an ideal Mmap
|
|
249
|
+
map F = save, Mmap;
|
|
250
|
+
dbprint(ppl,"1. commuting Cartans: ");
|
|
251
|
+
dbprint(ppl-1,ComCartan);
|
|
252
|
+
/* [e_i, f_j] =0 if i<>j */
|
|
253
|
+
ideal ComPosNeg; // assume: #Neg=#Pos
|
|
254
|
+
for (i=1; i<size(iPos); i++)
|
|
255
|
+
{
|
|
256
|
+
for (j=1; j<=size(iPos); j++)
|
|
257
|
+
{
|
|
258
|
+
if (j !=i)
|
|
259
|
+
{
|
|
260
|
+
ComPosNeg = ComPosNeg + lieBracket(var(iPos[i]),var(iNeg[j]));
|
|
261
|
+
ComPosNeg = ComPosNeg + lieBracket(var(iPos[j]),var(iNeg[i]));
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
ComPosNeg = simplify(ComPosNeg,1+2+8);
|
|
266
|
+
dbprint(ppl,"2. commuting Positive and Negative:");
|
|
267
|
+
dbprint(ppl-1,ComPosNeg);
|
|
268
|
+
/* [e_i, f_i] = h_i */
|
|
269
|
+
poly tempo;
|
|
270
|
+
for (i=1; i<=size(iCartan); i++)
|
|
271
|
+
{
|
|
272
|
+
tempo = lieBracket(var(iPos[i]),var(iNeg[i])) - var(iCartan[i]);
|
|
273
|
+
ComPosNeg = ComPosNeg + tempo;
|
|
274
|
+
}
|
|
275
|
+
// ComPosNeg = simplify(ComPosNeg,1+2+8);
|
|
276
|
+
dbprint(ppl,"3. added sl2 triples [e_i,f_i]=h_i");
|
|
277
|
+
dbprint(ppl-1,ComPosNeg);
|
|
278
|
+
|
|
279
|
+
/* [h_i, e_j] = A_ij e_j */
|
|
280
|
+
/* [h_i, f_j] = -A_ij f_j */
|
|
281
|
+
ideal ActCartan; // assume: #Neg=#Pos
|
|
282
|
+
for (i=1; i<=size(iCartan); i++)
|
|
283
|
+
{
|
|
284
|
+
for (j=1; j<=size(iCartan); j++)
|
|
285
|
+
{
|
|
286
|
+
tempo = lieBracket(var(iCartan[i]),var(iPos[j])) - A[i,j]*var(iPos[j]);
|
|
287
|
+
ActCartan = ActCartan + tempo;
|
|
288
|
+
tempo = lieBracket(var(iCartan[i]),var(iNeg[j])) + A[i,j]*var(iNeg[j]);
|
|
289
|
+
ActCartan = ActCartan + tempo;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
ActCartan = simplify(ActCartan,1+2+8);
|
|
293
|
+
dbprint(ppl,"4. actions of Cartan:");
|
|
294
|
+
dbprint(ppl-1, ActCartan);
|
|
295
|
+
|
|
296
|
+
/* final part: prepare the output */
|
|
297
|
+
setring LPsave;
|
|
298
|
+
ideal fsRel = srNeg, srPos, ComPosNeg, ComCartan, ActCartan;
|
|
299
|
+
export fsRel;
|
|
300
|
+
setring save;
|
|
301
|
+
return(LPsave);
|
|
302
|
+
}
|
|
303
|
+
example
|
|
304
|
+
{
|
|
305
|
+
"EXAMPLE:"; echo = 2;
|
|
306
|
+
intmat A[2][2] =
|
|
307
|
+
2, -1,
|
|
308
|
+
-1, 2; // A_2 = sl_3 Cartan matrix
|
|
309
|
+
ring r = 0,(f1,f2,h1,h2,e1,e2),dp;
|
|
310
|
+
ideal negroots = f1,f2; ideal cartans = h1,h2; ideal posroots = e1,e2;
|
|
311
|
+
int uptodeg = 5;
|
|
312
|
+
def RS = fullSerreRelations(A,negroots,cartans,posroots,uptodeg);
|
|
313
|
+
setring RS; fsRel;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/* intmat A[2][2] =
|
|
317
|
+
2, -1,
|
|
318
|
+
-3, 2; // G_2 Cartan matrix
|
|
319
|
+
*/
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
static proc varIdeal2intvec(ideal I)
|
|
323
|
+
{
|
|
324
|
+
// used in SerreRelations
|
|
325
|
+
/* assume1: input ideal is a list of variables of the ground ring */
|
|
326
|
+
int i,j; intvec V;
|
|
327
|
+
for (i=1; i<= size(I); i++)
|
|
328
|
+
{
|
|
329
|
+
j = univariate(I[i]);
|
|
330
|
+
if (j<=0)
|
|
331
|
+
{
|
|
332
|
+
ERROR("input ideal must contain only variables");
|
|
333
|
+
}
|
|
334
|
+
V[i] = j;
|
|
335
|
+
}
|
|
336
|
+
dbprint(printlevel-voice+2,V);
|
|
337
|
+
/* now we make a smaller list of non-repeating entries */
|
|
338
|
+
ideal iW = simplify(ideal(V),2+4); // no zeros, no repetitions
|
|
339
|
+
if (size(iW) < size(V))
|
|
340
|
+
{
|
|
341
|
+
/* extract intvec from iW */
|
|
342
|
+
intvec inW;
|
|
343
|
+
for(j=1; j<=size(iW); j++)
|
|
344
|
+
{
|
|
345
|
+
inW[j] = int(leadcoef(iW[j]));
|
|
346
|
+
}
|
|
347
|
+
return(inW);
|
|
348
|
+
}
|
|
349
|
+
return(V);
|
|
350
|
+
}
|
|
351
|
+
example
|
|
352
|
+
{
|
|
353
|
+
"EXAMPLE:"; echo = 2;
|
|
354
|
+
ring r = 0,(x,y,z),dp;
|
|
355
|
+
ideal I = x,z;
|
|
356
|
+
varIdeal2intvec(I);
|
|
357
|
+
varIdeal2intvec(ideal(x2,y^3,x+1));
|
|
358
|
+
varIdeal2intvec(ideal(x*y,y,x+1));
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
proc ademRelations(int i, int j)
|
|
362
|
+
"USAGE: ademRelations(i,j); i,j int
|
|
363
|
+
RETURN: ring (and exports ideal)
|
|
364
|
+
PURPOSE: compute the ideal of Adem relations for i<2j in characteristic 0
|
|
365
|
+
the ideal is exported under the name AdemRel in the output ring
|
|
366
|
+
EXAMPLE: example ademRelations; shows examples
|
|
367
|
+
"
|
|
368
|
+
{
|
|
369
|
+
// produces Adem relations for i<2j in char 0
|
|
370
|
+
// assume: 0<i<2j
|
|
371
|
+
// requires presence of vars up to i+j
|
|
372
|
+
if ( (i<0) || (i >= 2*j) )
|
|
373
|
+
{
|
|
374
|
+
ERROR("arguments out of range"); return(0);
|
|
375
|
+
}
|
|
376
|
+
ring @r = 0,(s(i+j..0)),lp;
|
|
377
|
+
poly p,q;
|
|
378
|
+
number n;
|
|
379
|
+
int ii = i div 2; int k;
|
|
380
|
+
// k=0 => s(0)=1
|
|
381
|
+
n = binomial(j-1,i);
|
|
382
|
+
q = n*s(i+j)*s(0);
|
|
383
|
+
// printf("k=0, term=%s",q);
|
|
384
|
+
p = p + q;
|
|
385
|
+
for (k=1; k<= ii; k++)
|
|
386
|
+
{
|
|
387
|
+
n = binomial(j-k-1,i-2*k);
|
|
388
|
+
q = n*s(i+j-k)*s(k);;
|
|
389
|
+
// printf("k=%s, term=%s",k,q);
|
|
390
|
+
p = p + q;
|
|
391
|
+
}
|
|
392
|
+
poly AdemRel = p;
|
|
393
|
+
export AdemRel;
|
|
394
|
+
return(@r);
|
|
395
|
+
}
|
|
396
|
+
example
|
|
397
|
+
{
|
|
398
|
+
"EXAMPLE:"; echo = 2;
|
|
399
|
+
def A = ademRelations(2,5);
|
|
400
|
+
setring A;
|
|
401
|
+
AdemRel;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/*
|
|
405
|
+
1,1: 0
|
|
406
|
+
1,2: s(3)*s(0) == s(3) -> def for s(3):=s(1)s(2)
|
|
407
|
+
2,1: adm
|
|
408
|
+
2,2: s(3)*s(1) == s(1)s(2)s(1)
|
|
409
|
+
1,3: 0 ( since 2*s(4)*s(0) = 0 mod 2)
|
|
410
|
+
3,1: adm
|
|
411
|
+
2,3: s(5)*s(0)+s(4)*s(1) == s(5)+s(4)*s(1)
|
|
412
|
+
3,2: 0
|
|
413
|
+
3,3: s(5)*s(1)
|
|
414
|
+
1,4: 3*s(5)*s(0) == s(5) -> def for s(5):=s(1)*s(4)
|
|
415
|
+
4,1: adm
|
|
416
|
+
2,4: 3*s(6)*s(0)+s(5)*s(1) == s(6) + s(5)*s(1) == s(6) + s(1)*s(4)*s(1)
|
|
417
|
+
4,2: adm
|
|
418
|
+
4,3: s(5)*s(2)
|
|
419
|
+
3,4: s(7)*s(0)+2*s(6)*s(1) == s(7) -> def for s(7):=s(3)*s(4)
|
|
420
|
+
4,4: s(7)*s(1)+s(6)*s(2)
|
|
421
|
+
*/
|
|
422
|
+
|
|
423
|
+
/* s1,s2:
|
|
424
|
+
s1*s1 =0, s2*s2 = s1*s2*s1
|
|
425
|
+
try char 0:
|
|
426
|
+
s1,s2:
|
|
427
|
+
s1*s1 =0, s2*s2 = s1*s2*s1, s(1)*s(3)== s(1)*s(1)*s(3) == 0 = 2*s(4) ->def for s(4)
|
|
428
|
+
hence 2==0! only in char 2
|
|
429
|
+
Adem rels modulo 2 are interesting
|
|
430
|
+
*/
|
|
431
|
+
|
|
432
|
+
////////////////////////////////////////////////////////////////////
|
|
433
|
+
// Operator Algebras ///////////////////////////////////////////////
|
|
434
|
+
////////////////////////////////////////////////////////////////////
|
|
435
|
+
|
|
436
|
+
proc operatorAlgebra(string a, int d)
|
|
437
|
+
"USAGE: operatorAlgebra(a,d); a a string, d an integer
|
|
438
|
+
RETURN: ring
|
|
439
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
440
|
+
- a gives the name of the algebra
|
|
441
|
+
- d gives the degreebound for the Letterplace ring
|
|
442
|
+
|
|
443
|
+
a must be one of the following:
|
|
444
|
+
integrodiff3
|
|
445
|
+
toeplitz
|
|
446
|
+
weyl1
|
|
447
|
+
usl2
|
|
448
|
+
usl2h
|
|
449
|
+
shift1inverse
|
|
450
|
+
exterior2
|
|
451
|
+
quadrowmm
|
|
452
|
+
shift1
|
|
453
|
+
weyl1inverse
|
|
454
|
+
|
|
455
|
+
This is a collection of common algebras.
|
|
456
|
+
"
|
|
457
|
+
{
|
|
458
|
+
if (d < 2) {
|
|
459
|
+
ERROR("Degbound d is too small. Must be at least 2.");
|
|
460
|
+
}
|
|
461
|
+
int baseringdef;
|
|
462
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
463
|
+
{
|
|
464
|
+
def save = basering;
|
|
465
|
+
baseringdef = 1;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
if (a == "integrodiff3") {
|
|
469
|
+
ring r = 0,(D,II,x),dp;
|
|
470
|
+
def R = freeAlgebra(r, d);
|
|
471
|
+
setring(R);
|
|
472
|
+
ideal I = D*x-x*D-1,
|
|
473
|
+
II*x-x*II+II*II,
|
|
474
|
+
D*II-1;
|
|
475
|
+
}
|
|
476
|
+
if (a == "toeplitz") {
|
|
477
|
+
ring r = 0,(y,x),dp;
|
|
478
|
+
def R = freeAlgebra(r, d);
|
|
479
|
+
setring(R);
|
|
480
|
+
ideal I = y*x-1;
|
|
481
|
+
}
|
|
482
|
+
if (a == "weyl1") {
|
|
483
|
+
ring r = 0,(D,x),dp;
|
|
484
|
+
def R = freeAlgebra(r, d);
|
|
485
|
+
setring(R);
|
|
486
|
+
ideal I = D*x-x*D-1;
|
|
487
|
+
}
|
|
488
|
+
if (a == "usl2") {
|
|
489
|
+
ring r = 0,(h,f,e),dp;
|
|
490
|
+
def R = freeAlgebra(r, d);
|
|
491
|
+
setring(R);
|
|
492
|
+
ideal I = f*e-e*f+h,
|
|
493
|
+
h*e-e*h-2*e,
|
|
494
|
+
h*f-f*h+2*f;
|
|
495
|
+
}
|
|
496
|
+
if (a == "usl2h") {
|
|
497
|
+
ring r = 0,(H,h,f,e),dp;
|
|
498
|
+
def R = freeAlgebra(r, d);
|
|
499
|
+
setring(R);
|
|
500
|
+
ideal I = f*e-e*f+h*H,
|
|
501
|
+
h*e-e*h-2*e*H,
|
|
502
|
+
h*f-f*h+2*f*H,
|
|
503
|
+
f*H-H*f,
|
|
504
|
+
e*H-H*e,
|
|
505
|
+
h*H-H*h;
|
|
506
|
+
}
|
|
507
|
+
if (a == "shift1inverse") {
|
|
508
|
+
ring r = 0,(D,x,t),dp;
|
|
509
|
+
def R = freeAlgebra(r, d);
|
|
510
|
+
setring(R);
|
|
511
|
+
ideal I = D*x-x*D-D,
|
|
512
|
+
t*x-1,
|
|
513
|
+
x*t-1;
|
|
514
|
+
}
|
|
515
|
+
if (a == "exterior2") {
|
|
516
|
+
ring r = 0,(y,x),dp;
|
|
517
|
+
def R = freeAlgebra(r, d);
|
|
518
|
+
setring(R);
|
|
519
|
+
ideal I = y*x+x*y,
|
|
520
|
+
x*x,
|
|
521
|
+
y*y;
|
|
522
|
+
}
|
|
523
|
+
if (a == "quadrowmm") {
|
|
524
|
+
ring r = 0,(y,x),dp;
|
|
525
|
+
def R = freeAlgebra(r, d);
|
|
526
|
+
setring(R);
|
|
527
|
+
ideal I = y*x-x*y,
|
|
528
|
+
x*x,
|
|
529
|
+
y*y;
|
|
530
|
+
}
|
|
531
|
+
if (a == "shift1") {
|
|
532
|
+
ring r = 0,(s,x),dp;
|
|
533
|
+
def R = freeAlgebra(r, d);
|
|
534
|
+
setring(R);
|
|
535
|
+
ideal I = s*x-x*s-s;
|
|
536
|
+
}
|
|
537
|
+
if (a == "weyl1inverse") {
|
|
538
|
+
ring r = 0,(D,x,t),dp;
|
|
539
|
+
def R = freeAlgebra(r, d);
|
|
540
|
+
setring(R);
|
|
541
|
+
ideal I = D*x-x*D-1,
|
|
542
|
+
t*x-1,
|
|
543
|
+
x*t-1;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
if (!defined(I)) {
|
|
547
|
+
ERROR("Illegal argument for algebra");
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
export(I);
|
|
551
|
+
if (baseringdef == 1) {setring save;}
|
|
552
|
+
return(R);
|
|
553
|
+
}
|
|
554
|
+
example
|
|
555
|
+
{
|
|
556
|
+
"EXAMPLE:"; echo = 2;
|
|
557
|
+
def R = operatorAlgebra("integrodiff3",5); setring R;
|
|
558
|
+
I; //relations of the algebra
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
////////////////////////////////////////////////////////////////////
|
|
562
|
+
// Baumslag ////////////////////////////////////////////////////////
|
|
563
|
+
// from Grischa Studzinski /////////////////////////////////////////
|
|
564
|
+
////////////////////////////////////////////////////////////////////
|
|
565
|
+
|
|
566
|
+
proc baumslagSolitar(int n, int m, int d, list #)
|
|
567
|
+
"USAGE: baumslagSolitar(m,n,d[,IsGroup]); n an integer, m an integer, d an integer, IsGroup an optional integer
|
|
568
|
+
RETURN: ring
|
|
569
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
570
|
+
- in the group case: A = a^(-1), B = b^(-1)
|
|
571
|
+
- negative input is only allowed in the group case!
|
|
572
|
+
- d gives a degreebound and must be >m,n
|
|
573
|
+
- varying n and m produces a family of examples
|
|
574
|
+
"
|
|
575
|
+
{
|
|
576
|
+
int isGroup = 0;
|
|
577
|
+
if (size(#) > 0) {isGroup = #[1];}
|
|
578
|
+
|
|
579
|
+
if (isGroup != 0)
|
|
580
|
+
{
|
|
581
|
+
int baseringdef;
|
|
582
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
583
|
+
{
|
|
584
|
+
def save = basering;
|
|
585
|
+
baseringdef = 1;
|
|
586
|
+
}
|
|
587
|
+
if (m < 0 || n < 0) {ERROR("Exponent can't be negative in monoid rings!");}
|
|
588
|
+
if (d < 1 || d < m || d < n) {ERROR("Degree bound must be positiv and greater then m,n!");}
|
|
589
|
+
int i;
|
|
590
|
+
ring mr = 0,(a,b),Dp;
|
|
591
|
+
def Mr = freeAlgebra(mr, d);
|
|
592
|
+
setring Mr;
|
|
593
|
+
poly p,q;
|
|
594
|
+
if (n==0) {p = b;}
|
|
595
|
+
else
|
|
596
|
+
{
|
|
597
|
+
p = a*b;
|
|
598
|
+
for (i = 1; i < n; i++) {p = a*p;}
|
|
599
|
+
}
|
|
600
|
+
if (m==0) {q = b;}
|
|
601
|
+
else
|
|
602
|
+
{
|
|
603
|
+
q = b*a;
|
|
604
|
+
for (i = 1; i < m; i++) {q = q*a;}
|
|
605
|
+
}
|
|
606
|
+
ideal I = p - q;
|
|
607
|
+
export(I);
|
|
608
|
+
if (baseringdef == 1) {setring save;}
|
|
609
|
+
return(Mr);
|
|
610
|
+
}
|
|
611
|
+
else
|
|
612
|
+
{
|
|
613
|
+
int baseringdef;
|
|
614
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
615
|
+
{
|
|
616
|
+
def save = basering;
|
|
617
|
+
baseringdef = 1;
|
|
618
|
+
}
|
|
619
|
+
int i;
|
|
620
|
+
if (d < 1 || d < absValue(m) || d < absValue(n)) {ERROR("Degree bound must be positiv and greater then |m|,|n|!");}
|
|
621
|
+
ring gr = 0,(a,b,A,B),Dp;
|
|
622
|
+
def Gr = freeAlgebra(gr, d);
|
|
623
|
+
setring Gr;
|
|
624
|
+
poly p,q;
|
|
625
|
+
if (n==0) {p = b;}
|
|
626
|
+
else
|
|
627
|
+
{if (n > 0)
|
|
628
|
+
{
|
|
629
|
+
p = a*b;
|
|
630
|
+
for (i = 1; i < n; i++) {p = a*p;}
|
|
631
|
+
}
|
|
632
|
+
else
|
|
633
|
+
{
|
|
634
|
+
p = A*b;
|
|
635
|
+
for (i = 1; i < -n; i++) {p = A*p;}
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
if (m==0) {q = b;}
|
|
639
|
+
else
|
|
640
|
+
{if (m > 0)
|
|
641
|
+
{
|
|
642
|
+
q = b*a;
|
|
643
|
+
for (i = 1; i < m; i++) {q = q*a;}
|
|
644
|
+
}
|
|
645
|
+
else
|
|
646
|
+
{
|
|
647
|
+
q = A*b;
|
|
648
|
+
for (i = 1; i < -m; i++) {q = q*A;}
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
ideal I = p - q, a*A - 1, b*B - 1, a*A - A*a, b*B - B*b;
|
|
652
|
+
export(I);
|
|
653
|
+
if (baseringdef == 1) {setring save;}
|
|
654
|
+
return(Gr);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
example
|
|
658
|
+
{
|
|
659
|
+
"EXAMPLE:"; echo = 2;
|
|
660
|
+
def R = baumslagSolitar(2,3,4); setring R;
|
|
661
|
+
I;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
proc baumslagGroup(int m, int n, int d)
|
|
665
|
+
"USAGE: baumslagGroup(m,n,d); m an integer, n an integer, d an integer
|
|
666
|
+
RETURN: ring
|
|
667
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
668
|
+
- Baumslag group with the following presentation
|
|
669
|
+
< a, b | a^m = b^n = 1 >
|
|
670
|
+
-d gives the degreebound for the Letterplace ring
|
|
671
|
+
- varying n and m produces a family of examples
|
|
672
|
+
"
|
|
673
|
+
{
|
|
674
|
+
if (m < 0 || n < 0 ) {ERROR("m,n must be non-negativ integers!");}
|
|
675
|
+
if (d < 1 || d < m || d < n) {ERROR("degreebound must be positiv and larger than n and m!");}
|
|
676
|
+
int i;
|
|
677
|
+
ring r = 0,(a,b),dp;
|
|
678
|
+
def R = freeAlgebra(r, d);
|
|
679
|
+
setring R;
|
|
680
|
+
poly p,q;
|
|
681
|
+
p = 1; q = 1;
|
|
682
|
+
for (i = 1; i <= m; i++){p = p*a;}
|
|
683
|
+
for (i = 1; i <= n; i++){q = q*b;}
|
|
684
|
+
ideal I = p-1,q-1;
|
|
685
|
+
export(I);
|
|
686
|
+
return(R);
|
|
687
|
+
}
|
|
688
|
+
example
|
|
689
|
+
{
|
|
690
|
+
"EXAMPLE:"; echo = 2;
|
|
691
|
+
def R = baumslagGroup(2,3,4); setring R;
|
|
692
|
+
I;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
////////////////////////////////////////////////////////////////////
|
|
696
|
+
// Crystallographic Groups //////////////////////////////////////////
|
|
697
|
+
// from Grischa Studzinski /////////////////////////////////////////
|
|
698
|
+
////////////////////////////////////////////////////////////////////
|
|
699
|
+
|
|
700
|
+
proc crystallographicGroupP1(int d)
|
|
701
|
+
"USAGE: crystallographicGroupP1(d); d an integer
|
|
702
|
+
RETURN: ring
|
|
703
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
704
|
+
- p1 group with the following presentation
|
|
705
|
+
< x, y | [x, y] = 1 >
|
|
706
|
+
-d gives the degreebound for the Letterplace ring
|
|
707
|
+
"
|
|
708
|
+
{
|
|
709
|
+
if (d < 2){ERROR("Degreebound is to small for chosen example!");}
|
|
710
|
+
|
|
711
|
+
int baseringdef;
|
|
712
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
713
|
+
{
|
|
714
|
+
def save = basering;
|
|
715
|
+
baseringdef = 1;
|
|
716
|
+
}
|
|
717
|
+
ring r = 2,(x,y,X,Y),dp;
|
|
718
|
+
def R = freeAlgebra(r, d);
|
|
719
|
+
setring R;
|
|
720
|
+
ideal I = x*y-y*x-1, X*x-1, x*X-1, y*Y-1, Y*y-1;
|
|
721
|
+
I = simplify(I,2);
|
|
722
|
+
export(I);
|
|
723
|
+
if (baseringdef == 1) {setring save;}
|
|
724
|
+
return(R);
|
|
725
|
+
}
|
|
726
|
+
example
|
|
727
|
+
{
|
|
728
|
+
"EXAMPLE:"; echo = 2;
|
|
729
|
+
def R = crystallographicGroupP1(5); setring R;
|
|
730
|
+
I;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
// old? there is already another crystallographicGroupP2 proc
|
|
734
|
+
/* proc crystallographicGroupP2(int d) */
|
|
735
|
+
/* " */
|
|
736
|
+
/* p2 group with the following presentation */
|
|
737
|
+
/* < x, y, r | [x, y] = r^2 = 1, r^(-1)*x*r = x^(-1), r^(-1)*y*r = y^(-1) > */
|
|
738
|
+
/* Note: r = r^(-1) */
|
|
739
|
+
/* " */
|
|
740
|
+
/* { */
|
|
741
|
+
/* if (d < 3){ERROR("Degreebound is to small for chosen example!");} */
|
|
742
|
+
|
|
743
|
+
/* int baseringdef; */
|
|
744
|
+
/* if (defined(basering)) // if a basering is defined, it should be saved for later use */
|
|
745
|
+
/* { */
|
|
746
|
+
/* def save = basering; */
|
|
747
|
+
/* baseringdef = 1; */
|
|
748
|
+
/* } */
|
|
749
|
+
/* ring r = 2,(x,y,r,X,Y),dp; */
|
|
750
|
+
/* def R = freeAlgebra(r, d); */
|
|
751
|
+
/* setring R; */
|
|
752
|
+
/* ideal I = x*y-y*x-1, x*y-y*x-r*r, r*r-1, r*x*r-X, r*y*r-Y,x*X-1, */
|
|
753
|
+
/* X*x-1, Y*y-1, y*Y-1; */
|
|
754
|
+
/* I = simplify(I,2); */
|
|
755
|
+
/* export(I); */
|
|
756
|
+
/* if (baseringdef == 1) {setring save;} */
|
|
757
|
+
/* return(R); */
|
|
758
|
+
/* } */
|
|
759
|
+
|
|
760
|
+
proc crystallographicGroupPM(int d)
|
|
761
|
+
"USAGE: crystallographicGroupPM(d); d an integer
|
|
762
|
+
RETURN: ring
|
|
763
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
764
|
+
- pm group with the following presentation
|
|
765
|
+
< x, y, m | [x, y] = m^2 = 1, m^(-1)*x*m = x, m^(-1)*y*m = y^(-1) >
|
|
766
|
+
- d gives the degreebound for the Letterplace ring
|
|
767
|
+
"
|
|
768
|
+
{
|
|
769
|
+
if (d < 3){ERROR("Degreebound is to small for chosen example!");}
|
|
770
|
+
|
|
771
|
+
int baseringdef;
|
|
772
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
773
|
+
{
|
|
774
|
+
def save = basering;
|
|
775
|
+
baseringdef = 1;
|
|
776
|
+
}
|
|
777
|
+
ring r = 2,(x,y,m,X,Y),dp;
|
|
778
|
+
def R = freeAlgebra(r, d);
|
|
779
|
+
setring R;
|
|
780
|
+
ideal I = x*y-y*x-1, x*y-y*x-m*m, m*m-1, m*x*m-x, m*y*m-Y,x*X-1,
|
|
781
|
+
X*x-1, Y*y-1, y*Y-1;
|
|
782
|
+
I = simplify(I,2);
|
|
783
|
+
export(I);
|
|
784
|
+
if (baseringdef == 1) {setring save;}
|
|
785
|
+
return(R);
|
|
786
|
+
}
|
|
787
|
+
example
|
|
788
|
+
{
|
|
789
|
+
"EXAMPLE:"; echo = 2;
|
|
790
|
+
def R = crystallographicGroupPM(5); setring R;
|
|
791
|
+
I;
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
proc crystallographicGroupPG(int d)
|
|
795
|
+
"USAGE: crystallographicGroupPG(d); d an integer
|
|
796
|
+
RETURN: ring
|
|
797
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
798
|
+
- pg group with the following presentation
|
|
799
|
+
< x, y, t | [x, y] = 1, t^2 = x, t^(-1)*y*t = y^(-1) >
|
|
800
|
+
- d gives the degreebound for the Letterplace ring
|
|
801
|
+
"
|
|
802
|
+
{
|
|
803
|
+
if (d < 3){ERROR("Degreebound is to small for chosen example!");}
|
|
804
|
+
|
|
805
|
+
int baseringdef;
|
|
806
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
807
|
+
{
|
|
808
|
+
def save = basering;
|
|
809
|
+
baseringdef = 1;
|
|
810
|
+
}
|
|
811
|
+
ring r = 2,(x,y,t,X,Y,T),dp;
|
|
812
|
+
def R = freeAlgebra(r, d);
|
|
813
|
+
setring R;
|
|
814
|
+
ideal I = x*y-y*x-1, t*t - x, T*y*t-Y, X*x-1, x*X-1,
|
|
815
|
+
Y*y-1, y*Y-1, t*T-1, T*t-1;
|
|
816
|
+
I = simplify(I,2);
|
|
817
|
+
export(I);
|
|
818
|
+
if (baseringdef == 1) {setring save;}
|
|
819
|
+
return(R);
|
|
820
|
+
}
|
|
821
|
+
example
|
|
822
|
+
{
|
|
823
|
+
"EXAMPLE:"; echo = 2;
|
|
824
|
+
def R = crystallographicGroupPG(5); setring R;
|
|
825
|
+
I;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
|
|
829
|
+
proc crystallographicGroupP2MM(int d)
|
|
830
|
+
"USAGE: crystallographicGroupP2MM(d); d an integer
|
|
831
|
+
RETURN: ring
|
|
832
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
833
|
+
- p2mm group with the following presentation
|
|
834
|
+
< x, y, p, q | [x, y] = [p, q] = p^2 = q^2 = 1, p^(-1)*x*p = x, q^(-1)*x*q = x^(-1), p^(-1)*y*p = y^(-1), q^(-1)*y*q = y >
|
|
835
|
+
- d gives the degreebound for the Letterplace ring
|
|
836
|
+
"
|
|
837
|
+
{
|
|
838
|
+
if (d < 3){ERROR("Degreebound is to small for chosen example!");}
|
|
839
|
+
|
|
840
|
+
int baseringdef;
|
|
841
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
842
|
+
{
|
|
843
|
+
def save = basering;
|
|
844
|
+
baseringdef = 1;
|
|
845
|
+
}
|
|
846
|
+
ring r = 2,(x,y,p,q,X,Y),dp;
|
|
847
|
+
def R = freeAlgebra(r, d);
|
|
848
|
+
setring R;
|
|
849
|
+
ideal I = x*y-y*x-1, p*q-q*p-1, p*p - 1, q*q - 1, p*y*p-Y, p*x*p-x,
|
|
850
|
+
q*y*q-y, q*x*q-X, X*x-1, x*X-1, Y*y-1, y*Y-1, x*y-y*x- p*p,
|
|
851
|
+
x*y-y*x- q*q, p*p-q*q;
|
|
852
|
+
I = simplify(I,2);
|
|
853
|
+
export(I);
|
|
854
|
+
if (baseringdef == 1) {setring save;}
|
|
855
|
+
return(R);
|
|
856
|
+
}
|
|
857
|
+
example
|
|
858
|
+
{
|
|
859
|
+
"EXAMPLE:"; echo = 2;
|
|
860
|
+
def R = crystallographicGroupP2MM(5); setring R;
|
|
861
|
+
I;
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
proc crystallographicGroupP2(int d)
|
|
865
|
+
"USAGE: crystallographicGroupP2(d); d an integer
|
|
866
|
+
RETURN: ring
|
|
867
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
868
|
+
- p2 group with the following presentation
|
|
869
|
+
< x, y, m, t | [x, y] = t^2 = 1, m^2 = y, t^(-1)*x*t = x, m^(-1)*x*m = x^(-1), t^(-1)*y*t = y^(-1), t^(-1)*m*t = m^(-1) >
|
|
870
|
+
- d gives the degreebound for the Letterplace ring
|
|
871
|
+
"
|
|
872
|
+
{
|
|
873
|
+
if (d < 3){ERROR("Degreebound is to small for chosen example!");}
|
|
874
|
+
|
|
875
|
+
int baseringdef;
|
|
876
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
877
|
+
{
|
|
878
|
+
def save = basering;
|
|
879
|
+
baseringdef = 1;
|
|
880
|
+
}
|
|
881
|
+
ring r = 2,(x,y,m,t,X,Y,M),dp;
|
|
882
|
+
def R = freeAlgebra(r, d);
|
|
883
|
+
setring R;
|
|
884
|
+
ideal I = x*y-y*x-1, x*y-y*x-t*t, m*m-y, t*t - 1, t*x*t-x,
|
|
885
|
+
M*x*m-X, t*y*t-Y, t*m*t-M, X*x-1, x*X-1, Y*y-1, y*Y-1,
|
|
886
|
+
m*M-1, M*m-1;
|
|
887
|
+
I = simplify(I,2);
|
|
888
|
+
export(I);
|
|
889
|
+
if (baseringdef == 1) {setring save;}
|
|
890
|
+
return(R);
|
|
891
|
+
}
|
|
892
|
+
example
|
|
893
|
+
{
|
|
894
|
+
"EXAMPLE:"; echo = 2;
|
|
895
|
+
def R = crystallographicGroupP2(5); setring R;
|
|
896
|
+
I;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
proc crystallographicGroupP2GG(int d)
|
|
900
|
+
"USAGE: crystallographicGroupP2GG(d); d an integer
|
|
901
|
+
RETURN: ring
|
|
902
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
903
|
+
- p2gg group with the following presentation
|
|
904
|
+
< x, y, u, v | [x, y] = (u*v)^2 = 1, u^2 = x, v^2 = y, v^(-1)*x*v = x^(-1), u^(-1)*y*u = y^(-1) >
|
|
905
|
+
- d gives the degreebound for the Letterplace ring
|
|
906
|
+
"
|
|
907
|
+
{
|
|
908
|
+
if (d < 4){ERROR("Degreebound is to small for chosen example!");}
|
|
909
|
+
|
|
910
|
+
int baseringdef;
|
|
911
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
912
|
+
{
|
|
913
|
+
def save = basering;
|
|
914
|
+
baseringdef = 1;
|
|
915
|
+
}
|
|
916
|
+
ring r = 2,(x,y,u,v,X,Y,U,V),dp;
|
|
917
|
+
def R = freeAlgebra(r, d);
|
|
918
|
+
setring R;
|
|
919
|
+
ideal I = x*y-y*x-1, x*y-y*x-u*v*u*v, u*v*u*v-1, u*u-x, v*v - y,
|
|
920
|
+
V*x*v-X, U*y*u-Y,
|
|
921
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1, u*U-1, U*u-1, v*V-1, V*v-1;
|
|
922
|
+
I = simplify(I,2);
|
|
923
|
+
export(I);
|
|
924
|
+
if (baseringdef == 1) {setring save;}
|
|
925
|
+
return(R);
|
|
926
|
+
}
|
|
927
|
+
example
|
|
928
|
+
{
|
|
929
|
+
"EXAMPLE:"; echo = 2;
|
|
930
|
+
def R = crystallographicGroupP2GG(5); setring R;
|
|
931
|
+
I;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
proc crystallographicGroupCM(int d)
|
|
935
|
+
"USAGE: crystallographicGroupCM(d); d an integer
|
|
936
|
+
RETURN: ring
|
|
937
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
938
|
+
- cm group with the following presentation
|
|
939
|
+
< x, y, t | [x, y] = t^2 = 1, t^(-1)*x*t = x*y, t^(-1)*y*t = y^(-1) >
|
|
940
|
+
- d gives the degreebound for the Letterplace ring
|
|
941
|
+
"
|
|
942
|
+
{
|
|
943
|
+
if (d < 3){ERROR("Degreebound is to small for chosen example!");}
|
|
944
|
+
|
|
945
|
+
int baseringdef;
|
|
946
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
947
|
+
{
|
|
948
|
+
def save = basering;
|
|
949
|
+
baseringdef = 1;
|
|
950
|
+
}
|
|
951
|
+
ring r = 2,(x,y,t,X,Y),dp;
|
|
952
|
+
def R = freeAlgebra(r, d);
|
|
953
|
+
setring R;
|
|
954
|
+
ideal I = x*y-y*x-1, x*y-y*x-t*t, t*t-1,
|
|
955
|
+
t*x*t-x*y, t*y*t-Y,
|
|
956
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
957
|
+
I = simplify(I,2);
|
|
958
|
+
export(I);
|
|
959
|
+
if (baseringdef == 1) {setring save;}
|
|
960
|
+
return(R);
|
|
961
|
+
}
|
|
962
|
+
example
|
|
963
|
+
{
|
|
964
|
+
"EXAMPLE:"; echo = 2;
|
|
965
|
+
def R = crystallographicGroupCM(5); setring R;
|
|
966
|
+
I;
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
proc crystallographicGroupC2MM(int d)
|
|
970
|
+
"USAGE: crystallographicGroupC2MM(d); d an integer
|
|
971
|
+
RETURN: ring
|
|
972
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
973
|
+
- c2mm group with the following presentation
|
|
974
|
+
< x, y, m, r | [x, y] = m^2 = r^2 = 1, m^(-1)*y*m = y^(-1), m^(-1)*x*m = x*y, r^(-1)*y*r = y^(-1), r^(-1)*x*r = x^(-1), m^(-1)*r*m = r^(-1) >
|
|
975
|
+
- d gives the degreebound for the Letterplace ring
|
|
976
|
+
"
|
|
977
|
+
{
|
|
978
|
+
if (d < 3){ERROR("Degreebound is to small for chosen example!");}
|
|
979
|
+
|
|
980
|
+
int baseringdef;
|
|
981
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
982
|
+
{
|
|
983
|
+
def save = basering;
|
|
984
|
+
baseringdef = 1;
|
|
985
|
+
}
|
|
986
|
+
ring rr = 2,(x,y,m,r,X,Y),dp;
|
|
987
|
+
def R = freeAlgebra(rr, d);
|
|
988
|
+
setring R;
|
|
989
|
+
ideal I = x*y-y*x-1, x*y-y*x-m*m, x*y-y*x-r*r, m*m-1, r*r-1,
|
|
990
|
+
m*m-r*r, m*y*m-Y, m*x*m-x*y, r*y*r-Y, r*x*r-X, m*r*m-r,
|
|
991
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
992
|
+
I = simplify(I,2);
|
|
993
|
+
export(I);
|
|
994
|
+
if (baseringdef == 1) {setring save;}
|
|
995
|
+
return(R);
|
|
996
|
+
}
|
|
997
|
+
example
|
|
998
|
+
{
|
|
999
|
+
"EXAMPLE:"; echo = 2;
|
|
1000
|
+
def R = crystallographicGroupC2MM(5); setring R;
|
|
1001
|
+
I;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
proc crystallographicGroupP4(int d)
|
|
1005
|
+
"USAGE: crystallographicGroupP4(d); d an integer
|
|
1006
|
+
RETURN: ring
|
|
1007
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1008
|
+
- p4 group with the following presentation
|
|
1009
|
+
< x, y, r | [x, y] = r^4 = 1, r^(-1)*x*r = x^(-1), r^(-1)*x*r = y >
|
|
1010
|
+
- d gives the degreebound for the Letterplace ring
|
|
1011
|
+
"
|
|
1012
|
+
{
|
|
1013
|
+
if (d < 5){ERROR("Degreebound is to small for chosen example!");}
|
|
1014
|
+
|
|
1015
|
+
int baseringdef;
|
|
1016
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1017
|
+
{
|
|
1018
|
+
def save = basering;
|
|
1019
|
+
baseringdef = 1;
|
|
1020
|
+
}
|
|
1021
|
+
ring rr = 2,(x,y,r,X,Y),dp;
|
|
1022
|
+
def R = freeAlgebra(rr, d);
|
|
1023
|
+
setring R;
|
|
1024
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r*r*r, r*r*r*r-1,
|
|
1025
|
+
r*r*r*x*r-X, r*r*r*x*r-y,
|
|
1026
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1027
|
+
I = simplify(I,2);
|
|
1028
|
+
export(I);
|
|
1029
|
+
if (baseringdef == 1) {setring save;}
|
|
1030
|
+
return(R);
|
|
1031
|
+
}
|
|
1032
|
+
example
|
|
1033
|
+
{
|
|
1034
|
+
"EXAMPLE:"; echo = 2;
|
|
1035
|
+
def R = crystallographicGroupP4(5); setring R;
|
|
1036
|
+
I;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
proc crystallographicGroupP4MM(int d)
|
|
1040
|
+
"USAGE: crystallographicGroupP4MM(d); d an integer
|
|
1041
|
+
RETURN: ring
|
|
1042
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1043
|
+
- p4mm group with the following presentation
|
|
1044
|
+
< x, y, r, m | [x, y] = r^4 = m^2 = 1, r^(-1)*y*r = x^(-1), r^(-1)*x*r = y, m^(-1)*x*m = y, m^(-1)*r*m = r^(-1) >
|
|
1045
|
+
- d gives the degreebound for the Letterplace ring
|
|
1046
|
+
"
|
|
1047
|
+
{
|
|
1048
|
+
if (d < 5){ERROR("Degreebound is to small for chosen example!");}
|
|
1049
|
+
|
|
1050
|
+
int baseringdef;
|
|
1051
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1052
|
+
{
|
|
1053
|
+
def save = basering;
|
|
1054
|
+
baseringdef = 1;
|
|
1055
|
+
}
|
|
1056
|
+
ring rr = 2,(x,y,r,m,X,Y),dp;
|
|
1057
|
+
def R = freeAlgebra(rr, d);
|
|
1058
|
+
setring R;
|
|
1059
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r*r*r, r*r*r*r-1,
|
|
1060
|
+
r*r*r*x*r-X, r*r*r*x*r-y,
|
|
1061
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1062
|
+
I = simplify(I,2);
|
|
1063
|
+
export(I);
|
|
1064
|
+
if (baseringdef == 1) {setring save;}
|
|
1065
|
+
return(R);
|
|
1066
|
+
}
|
|
1067
|
+
example
|
|
1068
|
+
{
|
|
1069
|
+
"EXAMPLE:"; echo = 2;
|
|
1070
|
+
def R = crystallographicGroupP4MM(5); setring R;
|
|
1071
|
+
I;
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
proc crystallographicGroupP4GM(int d)
|
|
1075
|
+
"USAGE: crystallographicGroupP4GM(d); d an integer
|
|
1076
|
+
RETURN: ring
|
|
1077
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1078
|
+
- p4gm group with the following presentation
|
|
1079
|
+
< x, y, r, t | [x, y] = r^4 = t^2 = 1, r^(-1)*y*r = x^(-1), r^(-1)*x*r = y, t^(-1)*x*t = y, t^(-1)*r*t = x^(-1)*r^(-1)>
|
|
1080
|
+
- d gives the degreebound for the Letterplace ring
|
|
1081
|
+
"
|
|
1082
|
+
{
|
|
1083
|
+
if (d < 5){ERROR("Degreebound is to small for chosen example!");}
|
|
1084
|
+
|
|
1085
|
+
int baseringdef;
|
|
1086
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1087
|
+
{
|
|
1088
|
+
def save = basering;
|
|
1089
|
+
baseringdef = 1;
|
|
1090
|
+
}
|
|
1091
|
+
ring rr = 2,(x,y,r,t,X,Y),dp;
|
|
1092
|
+
def R = freeAlgebra(rr, d);
|
|
1093
|
+
setring R;
|
|
1094
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r*r*r, r*r*r*r-1, x*y-y*x-t*t,
|
|
1095
|
+
t*t-1, r*r*r*r-t*t, r*r*r*y*r-X, r*r*r*x*r-y,
|
|
1096
|
+
t*r*t-X*r*r*r, X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1097
|
+
I = simplify(I,2);
|
|
1098
|
+
export(I);
|
|
1099
|
+
if (baseringdef == 1) {setring save;}
|
|
1100
|
+
return(R);
|
|
1101
|
+
}
|
|
1102
|
+
example
|
|
1103
|
+
{
|
|
1104
|
+
"EXAMPLE:"; echo = 2;
|
|
1105
|
+
def R = crystallographicGroupP4GM(5); setring R;
|
|
1106
|
+
I;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
proc crystallographicGroupP3(int d)
|
|
1110
|
+
"USAGE: crystallographicGroupP3(d); d an integer
|
|
1111
|
+
RETURN: ring
|
|
1112
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1113
|
+
- p3 group with the following presentation
|
|
1114
|
+
< x, y, r | [x, y] = r^3 = 1, r^(-1)*x*r = x^(-1)*y, r^(-1)*y*r = x^(-1)>
|
|
1115
|
+
- d gives the degreebound for the Letterplace ring
|
|
1116
|
+
"
|
|
1117
|
+
{
|
|
1118
|
+
if (d < 4){ERROR("Degreebound is to small for chosen example!");}
|
|
1119
|
+
|
|
1120
|
+
int baseringdef;
|
|
1121
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1122
|
+
{
|
|
1123
|
+
def save = basering;
|
|
1124
|
+
baseringdef = 1;
|
|
1125
|
+
}
|
|
1126
|
+
ring rr = 2,(x,y,r,X,Y),dp;
|
|
1127
|
+
def R = freeAlgebra(rr, d);
|
|
1128
|
+
setring R;
|
|
1129
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r*r, r*r*r-1,
|
|
1130
|
+
r*r*x*r-X*y, r*r*y*r-X, X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1131
|
+
I = simplify(I,2);
|
|
1132
|
+
export(I);
|
|
1133
|
+
if (baseringdef == 1) {setring save;}
|
|
1134
|
+
return(R);
|
|
1135
|
+
}
|
|
1136
|
+
example
|
|
1137
|
+
{
|
|
1138
|
+
"EXAMPLE:"; echo = 2;
|
|
1139
|
+
def R = crystallographicGroupP3(5); setring R;
|
|
1140
|
+
I;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
proc crystallographicGroupP31M(int d)
|
|
1144
|
+
"USAGE: crystallographicGroupP31M(d); d an integer
|
|
1145
|
+
RETURN: ring
|
|
1146
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1147
|
+
- p31m group with the following presentation
|
|
1148
|
+
< x, y, r, t | [x, y] = r^2 = t^2 = (t*r)^3 = 1, r^(-1)*x*r = x, t^(-1)*y*t = y, t^(-1)*x*t = x^(-1)*y, r^(-1)*y*r = x*y^(-1) >
|
|
1149
|
+
- d gives the degreebound for the Letterplace ring
|
|
1150
|
+
"
|
|
1151
|
+
{
|
|
1152
|
+
if (d < 6){ERROR("Degreebound is to small for chosen example!");}
|
|
1153
|
+
|
|
1154
|
+
int baseringdef;
|
|
1155
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1156
|
+
{
|
|
1157
|
+
def save = basering;
|
|
1158
|
+
baseringdef = 1;
|
|
1159
|
+
}
|
|
1160
|
+
ring rr = 2,(x,y,r,t,X,Y),dp;
|
|
1161
|
+
def R = freeAlgebra(rr, d);
|
|
1162
|
+
setring R;
|
|
1163
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r, x*y-y*x-t*t, r*r-1, t*t-1,
|
|
1164
|
+
t*r*t*r*t*r-1, r*r-t*t, x*y-y*x-t*r*t*r*t*r,
|
|
1165
|
+
t*r*t*r*t*r-r*r, t*r*t*r*t*r-t*t,
|
|
1166
|
+
r*x*r-x, t*y*t-y, t*x*t-X*y, r*y*r-x*Y,
|
|
1167
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1168
|
+
I = simplify(I,2);
|
|
1169
|
+
export(I);
|
|
1170
|
+
if (baseringdef == 1) {setring save;}
|
|
1171
|
+
return(R);
|
|
1172
|
+
}
|
|
1173
|
+
example
|
|
1174
|
+
{
|
|
1175
|
+
"EXAMPLE:"; echo = 2;
|
|
1176
|
+
def R = crystallographicGroupP31M(6); setring R;
|
|
1177
|
+
I;
|
|
1178
|
+
}
|
|
1179
|
+
|
|
1180
|
+
proc crystallographicGroupP3M1(int d)
|
|
1181
|
+
"USAGE: crystallographicGroupP3M1(d); d an integer
|
|
1182
|
+
RETURN: ring
|
|
1183
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1184
|
+
- p3m1 group with the following presentation
|
|
1185
|
+
< x, y, r, m | [x, y] = r^3 = m^2 = 1, m^(-1)*r*m = r^2, r^(-1)*x*r = x^(-1)*y, r^(-1)*y*r = x^(-1), m^(-1)*x*m = x^(-1), m^(-1)*y*m = x^(-1)*y >
|
|
1186
|
+
- d gives the degreebound for the Letterplace ring
|
|
1187
|
+
"
|
|
1188
|
+
{
|
|
1189
|
+
if (d < 4){ERROR("Degreebound is to small for chosen example!");}
|
|
1190
|
+
|
|
1191
|
+
int baseringdef;
|
|
1192
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1193
|
+
{
|
|
1194
|
+
def save = basering;
|
|
1195
|
+
baseringdef = 1;
|
|
1196
|
+
}
|
|
1197
|
+
ring rr = 2,(x,y,r,m,X,Y),dp;
|
|
1198
|
+
def R = freeAlgebra(rr, d);
|
|
1199
|
+
setring R;
|
|
1200
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r*r, x*y-y*x-m*m, r*r*r-1, m*m-1,
|
|
1201
|
+
r*r*r-m*m, m*r*m-r*r, r*r*x*r-X*y, r*r*y*r-X,m*x*m-X,
|
|
1202
|
+
m*y*m-X*y, X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1203
|
+
I = simplify(I,2);
|
|
1204
|
+
export(I);
|
|
1205
|
+
if (baseringdef == 1) {setring save;}
|
|
1206
|
+
return(R);
|
|
1207
|
+
}
|
|
1208
|
+
example
|
|
1209
|
+
{
|
|
1210
|
+
"EXAMPLE:"; echo = 2;
|
|
1211
|
+
def R = crystallographicGroupP3M1(5); setring R;
|
|
1212
|
+
I;
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
proc crystallographicGroupP6(int d)
|
|
1216
|
+
"USAGE: crystallographicGroupP6(d); d an integer
|
|
1217
|
+
RETURN: ring
|
|
1218
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1219
|
+
- p6 group with the following presentation
|
|
1220
|
+
< x, y, r | [x, y] = r^6 = 1, r^(-1)*x*r = y, r^(-1)*y*r = x^(-1)*y>
|
|
1221
|
+
- d gives the degreebound for the Letterplace ring
|
|
1222
|
+
"
|
|
1223
|
+
{
|
|
1224
|
+
if (d < 7){ERROR("Degreebound is to small for chosen example!");}
|
|
1225
|
+
|
|
1226
|
+
int baseringdef;
|
|
1227
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1228
|
+
{
|
|
1229
|
+
def save = basering;
|
|
1230
|
+
baseringdef = 1;
|
|
1231
|
+
}
|
|
1232
|
+
ring rr = 2,(x,y,r,X,Y),dp;
|
|
1233
|
+
def R = freeAlgebra(rr, d);
|
|
1234
|
+
setring R;
|
|
1235
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r*r*r*r*r, r*r*r*r*r*r-1,
|
|
1236
|
+
r*r*r*r*r*x*r-y, r*r*r*r*r*y*r-X*y,
|
|
1237
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1238
|
+
I = simplify(I,2);
|
|
1239
|
+
export(I);
|
|
1240
|
+
if (baseringdef == 1) {setring save;}
|
|
1241
|
+
return(R);
|
|
1242
|
+
}
|
|
1243
|
+
example
|
|
1244
|
+
{
|
|
1245
|
+
"EXAMPLE:"; echo = 2;
|
|
1246
|
+
def R = crystallographicGroupP6(7); setring R;
|
|
1247
|
+
I;
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
proc crystallographicGroupP6MM(int d)
|
|
1251
|
+
"USAGE: crystallographicGroupP6MM(d); d an integer
|
|
1252
|
+
RETURN: ring
|
|
1253
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1254
|
+
- p6mm group with the following presentation
|
|
1255
|
+
< x, y, r, m | [x, y] = r^6 = m^2 = 1, r^(-1)*y*r = x^(-1)*y, r^(-1)*x*r = y, m^(-1)*x*m = x^(-1), m^(-1)*y*m = x^(-1)*y, m^(-1)*r*m = r^(-1)*y>
|
|
1256
|
+
- d gives the degreebound for the Letterplace ring
|
|
1257
|
+
"
|
|
1258
|
+
{
|
|
1259
|
+
if (d < 7){ERROR("Degreebound is to small for chosen example!");}
|
|
1260
|
+
|
|
1261
|
+
int baseringdef;
|
|
1262
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1263
|
+
{
|
|
1264
|
+
def save = basering;
|
|
1265
|
+
baseringdef = 1;
|
|
1266
|
+
}
|
|
1267
|
+
ring rr = 2,(x,y,r,m,X,Y),dp;
|
|
1268
|
+
def R = freeAlgebra(rr, d);
|
|
1269
|
+
setring R;
|
|
1270
|
+
ideal I = x*y-y*x-1, x*y-y*x-r*r*r*r*r*r, r*r*r*r*r*r-1,
|
|
1271
|
+
x*y-y*x-m*m, r*r*r*r*r*r-m*m, m*m-1, m*x*m-X, m*y*m-X*y,
|
|
1272
|
+
r*r*r*r*r*x*r-y, r*r*r*r*r*y*r-X*y, m*r*m- r*r*r*r*r*y,
|
|
1273
|
+
X*x-1, x*X-1, Y*y-1, y*Y-1;
|
|
1274
|
+
I = simplify(I,2);
|
|
1275
|
+
export(I);
|
|
1276
|
+
if (baseringdef == 1) {setring save;}
|
|
1277
|
+
return(R);
|
|
1278
|
+
}
|
|
1279
|
+
example
|
|
1280
|
+
{
|
|
1281
|
+
"EXAMPLE:"; echo = 2;
|
|
1282
|
+
def R = crystallographicGroupP6MM(7); setring R;
|
|
1283
|
+
I;
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
////////////////////////////////////////////////////////////////////
|
|
1287
|
+
// Dyck Group //////////////////////////////////////////////////////
|
|
1288
|
+
// from Grischa Studzinski /////////////////////////////////////////
|
|
1289
|
+
////////////////////////////////////////////////////////////////////
|
|
1290
|
+
|
|
1291
|
+
proc dyckGroup1(int n, int d, intvec P)
|
|
1292
|
+
"USAGE: dyckGroup1(n,d,P); n an integer, d an integer, P an intvec
|
|
1293
|
+
RETURN: ring
|
|
1294
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1295
|
+
- The Dyck group with the following presentation
|
|
1296
|
+
< x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
|
|
1297
|
+
- negative exponents are allowed
|
|
1298
|
+
- representation in the form x_i^p_i - x_(i+1)^p_(i+1)
|
|
1299
|
+
- d gives the degreebound for the Letterplace ring
|
|
1300
|
+
- varying n and P produces a family of examples
|
|
1301
|
+
"
|
|
1302
|
+
{
|
|
1303
|
+
int baseringdef,i,j;
|
|
1304
|
+
if (n < 1) {ERROR("There must be at least one variable!");}
|
|
1305
|
+
if (d < n) {ERROR("Degreebound is to small!");}
|
|
1306
|
+
for (i = 1; i <= size(P); i++) {if (d < absValue(P[i])){ERROR("Degreebound is to small!");}}
|
|
1307
|
+
|
|
1308
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1309
|
+
{
|
|
1310
|
+
def save = basering;
|
|
1311
|
+
baseringdef = 1;
|
|
1312
|
+
}
|
|
1313
|
+
ring r = 2,(x(1..n),Y(1..n)),dp;
|
|
1314
|
+
def R = freeAlgebra(r, d);
|
|
1315
|
+
setring R;
|
|
1316
|
+
ideal I; poly p,q;
|
|
1317
|
+
p = 1; q = 1;
|
|
1318
|
+
for (i = 1; i<= n; i++) {p = p*var(i);}
|
|
1319
|
+
I = p-1;
|
|
1320
|
+
for (i = n; i > 0; i--)
|
|
1321
|
+
{
|
|
1322
|
+
if (P[i] >= 0) {for (j = 1; j <= P[i]; j++){q = q*var(i);}}
|
|
1323
|
+
else {for (j = 1; j <= -P[i]; j++){q = q*var(i+n);}}
|
|
1324
|
+
I = p - q,I;
|
|
1325
|
+
p = q; q = 1;
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
I = simplify(I,2);
|
|
1329
|
+
export(I);
|
|
1330
|
+
if (baseringdef == 1) {setring save;}
|
|
1331
|
+
return(R);
|
|
1332
|
+
}
|
|
1333
|
+
example
|
|
1334
|
+
{
|
|
1335
|
+
"EXAMPLE:"; echo = 2;
|
|
1336
|
+
intvec P = 1,2,3;
|
|
1337
|
+
def R = dyckGroup1(3,5,P); setring R;
|
|
1338
|
+
I;
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
|
|
1342
|
+
proc dyckGroup2(int n, int d, intvec P)
|
|
1343
|
+
"USAGE: dyckGroup2(n,d,P); n an integer, d an integer, P an intvec
|
|
1344
|
+
RETURN: ring
|
|
1345
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1346
|
+
- The Dyck group with the following presentation
|
|
1347
|
+
< x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
|
|
1348
|
+
- negative exponents are allowed
|
|
1349
|
+
- representation in the form x_i^p_i - 1
|
|
1350
|
+
- d gives the degreebound for the Letterplace ring
|
|
1351
|
+
- varying n and P produces a family of examples
|
|
1352
|
+
"
|
|
1353
|
+
{
|
|
1354
|
+
int baseringdef,i,j;
|
|
1355
|
+
if (n < 1) {ERROR("There must be at least one variable!");}
|
|
1356
|
+
if (d < n) {ERROR("Degreebound is to small!");}
|
|
1357
|
+
for (i = 1; i <= size(P); i++) {if (d < absValue(P[i])){ERROR("Degreebound is to small!");}}
|
|
1358
|
+
|
|
1359
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1360
|
+
{
|
|
1361
|
+
def save = basering;
|
|
1362
|
+
baseringdef = 1;
|
|
1363
|
+
}
|
|
1364
|
+
ring r = 2,(x(1..n),Y(1..n)),dp;
|
|
1365
|
+
def R = freeAlgebra(r, d);
|
|
1366
|
+
setring R;
|
|
1367
|
+
ideal I; poly p;
|
|
1368
|
+
p = 1;
|
|
1369
|
+
for (i = 1; i<= n; i++) {p = p*var(i);}
|
|
1370
|
+
I = p-1;
|
|
1371
|
+
for (i = n; i > 0; i--)
|
|
1372
|
+
{
|
|
1373
|
+
p = 1;
|
|
1374
|
+
if (P[i] >= 0) {for (j = 1; j <= P[i]; j++){p = p*var(i);}}
|
|
1375
|
+
else {for (j = 1; j <= -P[i]; j++){p = p*var(i+n);}}
|
|
1376
|
+
I = p - 1,I;
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
I = simplify(I,2);
|
|
1380
|
+
export(I);
|
|
1381
|
+
if (baseringdef == 1) {setring save;}
|
|
1382
|
+
return(R);
|
|
1383
|
+
}
|
|
1384
|
+
example
|
|
1385
|
+
{
|
|
1386
|
+
"EXAMPLE:"; echo = 2;
|
|
1387
|
+
intvec P = 1,2,3;
|
|
1388
|
+
def R = dyckGroup2(3,5,P); setring R;
|
|
1389
|
+
I;
|
|
1390
|
+
}
|
|
1391
|
+
|
|
1392
|
+
|
|
1393
|
+
|
|
1394
|
+
proc dyckGroup3(int n, int d, intvec P)
|
|
1395
|
+
"USAGE: dyckGroup2(n,d,P); n an integer, d an integer, P an intvec
|
|
1396
|
+
RETURN: ring
|
|
1397
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1398
|
+
- The Dyck group with the following presentation
|
|
1399
|
+
< x_1, x_2, ... , x_n | (x_1)^p1 = (x_2)^p2 = ... = (x_n)^pn = x_1 * x_2 * ... * x_n = 1 >
|
|
1400
|
+
- only positive exponents are allowed
|
|
1401
|
+
- no inverse generators needed
|
|
1402
|
+
- d gives the degreebound for the Letterplace ring
|
|
1403
|
+
- varying n and P produces a family of examples
|
|
1404
|
+
"
|
|
1405
|
+
{
|
|
1406
|
+
int baseringdef,i,j;
|
|
1407
|
+
if (n < 1) {ERROR("There must be at least one variable!");}
|
|
1408
|
+
if (d < n) {ERROR("Degreebound is to small!");}
|
|
1409
|
+
for (i = 1; i <= size(P); i++) {if (P[i] < 0){ERROR("Exponents must be positive!");}}
|
|
1410
|
+
for (i = 1; i <= size(P); i++) {if (d < P[i]){ERROR("Degreebound is to small!");}}
|
|
1411
|
+
|
|
1412
|
+
|
|
1413
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1414
|
+
{
|
|
1415
|
+
def save = basering;
|
|
1416
|
+
baseringdef = 1;
|
|
1417
|
+
}
|
|
1418
|
+
ring r = 2,x(1..n),dp;
|
|
1419
|
+
def R = freeAlgebra(r, d);
|
|
1420
|
+
setring R;
|
|
1421
|
+
ideal I; poly p;
|
|
1422
|
+
p = 1;
|
|
1423
|
+
for (i = 1; i<= n; i++) {p = p*var(i);}
|
|
1424
|
+
I = p-1;
|
|
1425
|
+
for (i = n; i > 0; i--)
|
|
1426
|
+
{
|
|
1427
|
+
p = 1;
|
|
1428
|
+
for (j = 1; j <= P[i]; j++){p = p*var(i);}
|
|
1429
|
+
I = p - 1,I;
|
|
1430
|
+
}
|
|
1431
|
+
|
|
1432
|
+
I = simplify(I,2);
|
|
1433
|
+
export(I);
|
|
1434
|
+
if (baseringdef == 1) {setring save;}
|
|
1435
|
+
return(R);
|
|
1436
|
+
}
|
|
1437
|
+
example
|
|
1438
|
+
{
|
|
1439
|
+
"EXAMPLE:"; echo = 2;
|
|
1440
|
+
intvec P = 1,2,3;
|
|
1441
|
+
def R = dyckGroup3(3,5,P); setring R;
|
|
1442
|
+
I;
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
////////////////////////////////////////////////////////////////////
|
|
1446
|
+
// Fibonacci Group /////////////////////////////////////////////////
|
|
1447
|
+
// from Grischa Studzinski /////////////////////////////////////////
|
|
1448
|
+
////////////////////////////////////////////////////////////////////
|
|
1449
|
+
|
|
1450
|
+
proc fibonacciGroup(int m, int d)
|
|
1451
|
+
"USAGE: fibonacciGroup(m,d); m an integer, d an integer
|
|
1452
|
+
RETURN: ring
|
|
1453
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1454
|
+
- The Fibonacci group F(2, m) with the following presentation
|
|
1455
|
+
< x_1, x_2, ... , x_m | x_i * x_(i + 1) = x_(i + 2) >
|
|
1456
|
+
- d gives the degreebound for the Letterplace ring
|
|
1457
|
+
- varying m produces a family of examples
|
|
1458
|
+
"
|
|
1459
|
+
{
|
|
1460
|
+
// TODO: basefield Q oder F2?
|
|
1461
|
+
// TODO: inverse Elemente!
|
|
1462
|
+
if (m < 3) {ERROR("At least three generators are required!");}
|
|
1463
|
+
if (d < 2) {ERROR("Degree bound must be at least 2!");}
|
|
1464
|
+
int baseringdef,i;
|
|
1465
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1466
|
+
{
|
|
1467
|
+
def save = basering;
|
|
1468
|
+
baseringdef = 1;
|
|
1469
|
+
}
|
|
1470
|
+
ring r = 2,(x(1..m),Y(1..m)),dp;
|
|
1471
|
+
def R = freeAlgebra(r, d);
|
|
1472
|
+
setring R;
|
|
1473
|
+
ideal I; poly p;
|
|
1474
|
+
for (i = 1; i < m-1; i++)
|
|
1475
|
+
{
|
|
1476
|
+
p = var(i)*var(i+1)-var(i+2);
|
|
1477
|
+
I = I,p;
|
|
1478
|
+
}
|
|
1479
|
+
for (i = 1; i <= m; i++)
|
|
1480
|
+
{
|
|
1481
|
+
p = var(i)*var(i+m)-1;
|
|
1482
|
+
I = I,p;
|
|
1483
|
+
p = var(i+m)*var(i)-1;
|
|
1484
|
+
I = I,p;
|
|
1485
|
+
}
|
|
1486
|
+
I = simplify(I,2);
|
|
1487
|
+
export(I);
|
|
1488
|
+
if (baseringdef == 1) {setring save;}
|
|
1489
|
+
return(R);
|
|
1490
|
+
}
|
|
1491
|
+
example
|
|
1492
|
+
{
|
|
1493
|
+
"EXAMPLE:"; echo = 2;
|
|
1494
|
+
def R = fibonacciGroup(3,5); setring R;
|
|
1495
|
+
I;
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
|
|
1499
|
+
////////////////////////////////////////////////////////////////////
|
|
1500
|
+
// Tetrahedron Groups ///////////////////////////////////////////////
|
|
1501
|
+
// from Grischa Studzinski /////////////////////////////////////////
|
|
1502
|
+
////////////////////////////////////////////////////////////////////
|
|
1503
|
+
|
|
1504
|
+
proc tetrahedronGroup(int g, int d)
|
|
1505
|
+
"USAGE: tetrahedronGroup(g,d); g an integer, d an integer
|
|
1506
|
+
RETURN: ring
|
|
1507
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1508
|
+
- g gives the number of the example (1 - 5)
|
|
1509
|
+
- d gives the degreebound for the Letterplace ring
|
|
1510
|
+
- varying g produces a family of examples
|
|
1511
|
+
|
|
1512
|
+
The examples are found in ``Classification of the finite generalized tetrahedron groups''
|
|
1513
|
+
by Gerhard Rosenberger and Martin Scheer.
|
|
1514
|
+
The 5 examples originate from Proposition 1.9 and describe
|
|
1515
|
+
finite generalized tetrahedron group in the Tsaranov-case, which are
|
|
1516
|
+
not equivalent to a presentation for an ordinary tetrahedron group.
|
|
1517
|
+
"
|
|
1518
|
+
{
|
|
1519
|
+
if (g < 1 || g > 5) {ERROR("There are only 5 examples!");}
|
|
1520
|
+
if ((g == 1 && d < 6)||(g == 2 && d < 6)||(g == 3 && d < 5)||(g == 4 && d < 4)||(g == 5 && d < 5))
|
|
1521
|
+
{ERROR("Degreebound is to small for chosen example!");}
|
|
1522
|
+
|
|
1523
|
+
int baseringdef,i,j;
|
|
1524
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1525
|
+
{
|
|
1526
|
+
def save = basering;
|
|
1527
|
+
baseringdef = 1;
|
|
1528
|
+
}
|
|
1529
|
+
ring r = 2,(x,y,z),dp;
|
|
1530
|
+
def R = freeAlgebra(r, d);
|
|
1531
|
+
setring R;
|
|
1532
|
+
ideal I;
|
|
1533
|
+
if (g == 1)
|
|
1534
|
+
{I = x*x*x*x*x-1, y*y-1, z*z*z-1, x*y*x*y*x*y-1, x*x*z*x*x*z-1,
|
|
1535
|
+
y*z*y*z-1;
|
|
1536
|
+
}
|
|
1537
|
+
if (g == 2)
|
|
1538
|
+
{I = x*x*x-1, y*y*y-1, z*z*z*z*z-1,x*y*x*y-1,x*z*x*z-1,
|
|
1539
|
+
y*z*z*y*z*z-1;
|
|
1540
|
+
}
|
|
1541
|
+
if (g == 3)
|
|
1542
|
+
{I = x*x*x-1, y*y*y-1, z*z*z-1, x*y*x*y-1, x*z*x*z-1, y*z*y*z-1;
|
|
1543
|
+
}
|
|
1544
|
+
if (g == 4)
|
|
1545
|
+
{I = x*x*x-1, y*y*y-1, z*z*z*z-1,x*y*x*y-1, x*z*x*z-1, y*z*y*z-1;
|
|
1546
|
+
}
|
|
1547
|
+
if (g ==5)
|
|
1548
|
+
{I = x*x*x-1, y*y*y-1, z*z*z*z*z-1,x*y*x*y-1, x*z*x*z-1, y*z*y*z-1;
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
I = simplify(I,2);
|
|
1552
|
+
export(I);
|
|
1553
|
+
if (baseringdef == 1) {setring save;}
|
|
1554
|
+
return(R);
|
|
1555
|
+
}
|
|
1556
|
+
example
|
|
1557
|
+
{
|
|
1558
|
+
"EXAMPLE:"; echo = 2;
|
|
1559
|
+
def R = tetrahedronGroup(3,5); setring R;
|
|
1560
|
+
I;
|
|
1561
|
+
}
|
|
1562
|
+
|
|
1563
|
+
|
|
1564
|
+
////////////////////////////////////////////////////////////////////
|
|
1565
|
+
// Triangular Groups ///////////////////////////////////////////////
|
|
1566
|
+
// from Grischa Studzinski /////////////////////////////////////////
|
|
1567
|
+
////////////////////////////////////////////////////////////////////
|
|
1568
|
+
|
|
1569
|
+
proc triangularGroup(int g, int d)
|
|
1570
|
+
"USAGE: triangularGroup(g,d); g an integer, d an integer
|
|
1571
|
+
RETURN: ring
|
|
1572
|
+
NOTE: - the ring contains the ideal I, which contains the required relations
|
|
1573
|
+
- g gives the number of the example (1 - 14)
|
|
1574
|
+
- d gives the degreebound for the Letterplace ring
|
|
1575
|
+
- varying g produces a family of examples
|
|
1576
|
+
|
|
1577
|
+
The examples are found in
|
|
1578
|
+
Classification of the finite generalized tetrahedron groups
|
|
1579
|
+
by Gerhard Rosenberger and Martin Scheer.
|
|
1580
|
+
The 14 examples are denoted in theorem 2.12
|
|
1581
|
+
"
|
|
1582
|
+
{
|
|
1583
|
+
if (g < 1 || g > 14) {ERROR("There are only 14 examples!");}
|
|
1584
|
+
if ((g == 1 && d < 20)||(g == 2 && d < 21)||(g == 3 && d < 10)||(g == 4 && d < 12)||(g == 5 && d < 10)||(g == 6 && d < 18)||(g == 7 && d < 20)||(g == 8 && d < 16)||(g == 9 && d < 10)||(g == 10 && d < 14)||(g == 11 && d < 16)||(g == 12 && d < 24)||(g == 13 && d < 28)||(g == 14 && d < 37))
|
|
1585
|
+
{ERROR("Degreebound is to small for chosen example!");}
|
|
1586
|
+
|
|
1587
|
+
int baseringdef;
|
|
1588
|
+
if (defined(basering)) // if a basering is defined, it should be saved for later use
|
|
1589
|
+
{
|
|
1590
|
+
def save = basering;
|
|
1591
|
+
baseringdef = 1;
|
|
1592
|
+
}
|
|
1593
|
+
ring r = 2,(a,b),dp;
|
|
1594
|
+
def R = freeAlgebra(r, d);
|
|
1595
|
+
setring R;
|
|
1596
|
+
ideal I;
|
|
1597
|
+
|
|
1598
|
+
if (g == 1)
|
|
1599
|
+
{I = a*a-1, b*b*b-1,
|
|
1600
|
+
a*b*a*b*a*b*b*a*b*b*a*b*a*b*a*b*b*a*b*b-1;
|
|
1601
|
+
}
|
|
1602
|
+
if (g == 2)
|
|
1603
|
+
{I = a*a-1, b*b*b-1,
|
|
1604
|
+
a*b*a*b*a*b*b*a*b*a*b*a*b*b*a*b*a*b*a*b*b-1;
|
|
1605
|
+
}
|
|
1606
|
+
if (g == 3)
|
|
1607
|
+
{I = a*a*a-1, b*b*b-1,
|
|
1608
|
+
a*b*a*b*b*a*b*a*b*b-1;
|
|
1609
|
+
}
|
|
1610
|
+
if (g == 4)
|
|
1611
|
+
{I = a*a*a-1, b*b*b-1,
|
|
1612
|
+
a*b*a*a*b*b*a*b*a*a*b*b-1;
|
|
1613
|
+
}
|
|
1614
|
+
if (g == 5)
|
|
1615
|
+
{I = a*a-1, b*b*b*b*b-1,
|
|
1616
|
+
a*b*a*b*b*a*b*a*b*b-1;
|
|
1617
|
+
}
|
|
1618
|
+
if (g == 6)
|
|
1619
|
+
{I = a*a-1, b*b*b*b*b-1,
|
|
1620
|
+
a*b*a*b*a*b*b*b*b*a*b*a*b*a*b*b*b*b-1;
|
|
1621
|
+
}
|
|
1622
|
+
if (g == 7)
|
|
1623
|
+
{I = a*a-1, b*b*b*b*b-1,
|
|
1624
|
+
a*b*a*b*b*a*b*b*b*b*a*b*a*b*b*a*b*b*b*b-1;
|
|
1625
|
+
}
|
|
1626
|
+
if (g == 8)
|
|
1627
|
+
{I = a*a-1, b*b*b*b-1,
|
|
1628
|
+
a*b*a*b*a*b*b*b*a*b*a*b*a*b*b*b-1;
|
|
1629
|
+
}
|
|
1630
|
+
if (g == 9)
|
|
1631
|
+
{I = a*a-1, b*b*b-1,
|
|
1632
|
+
a*b*a*b*b*a*b*a*b*b-1;
|
|
1633
|
+
}
|
|
1634
|
+
if (g == 10)
|
|
1635
|
+
{I = a*a-1, b*b*b-1,
|
|
1636
|
+
a*b*a*b*a*b*b*a*b*a*b*a*b*b-1;
|
|
1637
|
+
}
|
|
1638
|
+
if (g == 11)
|
|
1639
|
+
{I = a*a-1, b*b*b-1,
|
|
1640
|
+
a*b*a*b*a*b*a*b*b*a*b*a*b*a*b*b-1;
|
|
1641
|
+
}
|
|
1642
|
+
if (g == 12)
|
|
1643
|
+
{I = a*a-1, b*b*b-1,
|
|
1644
|
+
a*b*a*b*a*b*b*a*b*a*b*b*a*b*a*b*a*b*b*a*b*a*b*b-1;
|
|
1645
|
+
}
|
|
1646
|
+
if (g == 13)
|
|
1647
|
+
{I = a*a-1, b*b*b-1,
|
|
1648
|
+
a*b*a*b*a*b*a*b*a*b*b*a*b*b*a*b*a*b*a*b*a*b*a*b*b*a*b*b-1;
|
|
1649
|
+
}
|
|
1650
|
+
if (g == 14)
|
|
1651
|
+
{I = a*a-1, b*b*b-1,
|
|
1652
|
+
a*b*a*b*a*b*a*b*b*a*b*b*a*b*a*b*b*a*b*b*a*b*a*b*a*b*a*b*b*a*b*a*b*b*a*b*b-1;
|
|
1653
|
+
}
|
|
1654
|
+
|
|
1655
|
+
I = simplify(I,2);
|
|
1656
|
+
export(I);
|
|
1657
|
+
if (baseringdef == 1) {setring save;}
|
|
1658
|
+
return(R);
|
|
1659
|
+
}
|
|
1660
|
+
example
|
|
1661
|
+
{
|
|
1662
|
+
"EXAMPLE:"; echo = 2;
|
|
1663
|
+
def R = triangularGroup(3,10); setring R;
|
|
1664
|
+
I;
|
|
1665
|
+
}
|
|
1666
|
+
|