passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_14_0_arm64.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-gap-pkg-semigroups might be problematic. Click here for more details.
- gap/pkg/semigroups/CHANGELOG.md +1699 -0
- gap/pkg/semigroups/CONTRIBUTING.md +91 -0
- gap/pkg/semigroups/GNUmakefile +110 -0
- gap/pkg/semigroups/GNUmakefile.in +110 -0
- gap/pkg/semigroups/GPL +674 -0
- gap/pkg/semigroups/LICENSE +16 -0
- gap/pkg/semigroups/Makefile +26 -0
- gap/pkg/semigroups/Makefile.gappkg +225 -0
- gap/pkg/semigroups/PackageInfo.g +529 -0
- gap/pkg/semigroups/README.md +102 -0
- gap/pkg/semigroups/VERSIONS +112 -0
- gap/pkg/semigroups/aclocal.m4 +375 -0
- gap/pkg/semigroups/autogen.sh +25 -0
- gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
- gap/pkg/semigroups/config.guess +1807 -0
- gap/pkg/semigroups/config.log +1157 -0
- gap/pkg/semigroups/config.status +1132 -0
- gap/pkg/semigroups/config.sub +1960 -0
- gap/pkg/semigroups/configure +9742 -0
- gap/pkg/semigroups/configure.ac +71 -0
- gap/pkg/semigroups/data/doc/greens.pickle +1 -0
- gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
- gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
- gap/pkg/semigroups/data/tst/bipart4 +10 -0
- gap/pkg/semigroups/data/tst/pperm10 +1 -0
- gap/pkg/semigroups/data/tst/tables.gz +0 -0
- gap/pkg/semigroups/data/tst/testdata +1 -0
- gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
- gap/pkg/semigroups/data/tst/trans3 +7 -0
- gap/pkg/semigroups/data/tst/trans3-old +7 -0
- gap/pkg/semigroups/environment.yml +7 -0
- gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
- gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
- gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
- gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
- gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
- gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
- gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
- gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
- gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
- gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
- gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
- gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
- gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
- gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
- gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
- gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
- gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
- gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
- gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
- gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
- gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
- gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
- gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
- gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
- gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
- gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
- gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
- gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
- gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
- gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
- gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
- gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
- gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
- gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
- gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
- gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
- gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
- gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
- gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
- gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
- gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
- gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
- gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
- gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
- gap/pkg/semigroups/gap/elements/elements.gd +11 -0
- gap/pkg/semigroups/gap/elements/elements.gi +121 -0
- gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
- gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
- gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
- gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
- gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
- gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
- gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
- gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
- gap/pkg/semigroups/gap/elements/star.gd +21 -0
- gap/pkg/semigroups/gap/elements/star.gi +21 -0
- gap/pkg/semigroups/gap/elements/trans.gd +13 -0
- gap/pkg/semigroups/gap/elements/trans.gi +50 -0
- gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
- gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
- gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
- gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
- gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
- gap/pkg/semigroups/gap/fp/word.gd +15 -0
- gap/pkg/semigroups/gap/fp/word.gi +67 -0
- gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
- gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
- gap/pkg/semigroups/gap/greens/acting.gd +81 -0
- gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
- gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
- gap/pkg/semigroups/gap/greens/generic.gd +117 -0
- gap/pkg/semigroups/gap/greens/generic.gi +630 -0
- gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
- gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
- gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
- gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
- gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
- gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
- gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
- gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
- gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
- gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
- gap/pkg/semigroups/gap/main/acting.gd +36 -0
- gap/pkg/semigroups/gap/main/acting.gi +779 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
- gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
- gap/pkg/semigroups/gap/main/graded.gd +26 -0
- gap/pkg/semigroups/gap/main/graded.gi +355 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
- gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
- gap/pkg/semigroups/gap/main/orbits.gd +24 -0
- gap/pkg/semigroups/gap/main/orbits.gi +512 -0
- gap/pkg/semigroups/gap/main/semiact.gd +20 -0
- gap/pkg/semigroups/gap/main/semiact.gi +821 -0
- gap/pkg/semigroups/gap/main/setup.gd +61 -0
- gap/pkg/semigroups/gap/main/setup.gi +1094 -0
- gap/pkg/semigroups/gap/obsolete.gd +9 -0
- gap/pkg/semigroups/gap/obsolete.gi +14 -0
- gap/pkg/semigroups/gap/options.g +55 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
- gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
- gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
- gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
- gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
- gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
- gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
- gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
- gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
- gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
- gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
- gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
- gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
- gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
- gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
- gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
- gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
- gap/pkg/semigroups/gap/tools/display.gd +24 -0
- gap/pkg/semigroups/gap/tools/display.gi +749 -0
- gap/pkg/semigroups/gap/tools/io.gd +17 -0
- gap/pkg/semigroups/gap/tools/io.gi +543 -0
- gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
- gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
- gap/pkg/semigroups/gap/tools/utils.gd +19 -0
- gap/pkg/semigroups/gap/tools/utils.gi +756 -0
- gap/pkg/semigroups/gapbind14/.ccls +18 -0
- gap/pkg/semigroups/gapbind14/.clang-format +104 -0
- gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
- gap/pkg/semigroups/gapbind14/LICENSE +674 -0
- gap/pkg/semigroups/gapbind14/README.md +76 -0
- gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
- gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
- gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
- gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
- gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
- gap/pkg/semigroups/gapbind14/demo/configure +34 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
- gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
- gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
- gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
- gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
- gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
- gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
- gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
- gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
- gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
- gap/pkg/semigroups/init.g +150 -0
- gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
- gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
- gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
- gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
- gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
- gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
- gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
- gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
- gap/pkg/semigroups/m4/find_gap.m4 +94 -0
- gap/pkg/semigroups/makedoc.g +153 -0
- gap/pkg/semigroups/prerequisites.sh +62 -0
- gap/pkg/semigroups/read.g +105 -0
- gap/pkg/semigroups/release.toml +6 -0
- gap/pkg/semigroups/tst/extreme/README +2 -0
- gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
- gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
- gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
- gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
- gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
- gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
- gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
- gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
- gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
- gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
- gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
- gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
- gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
- gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
- gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
- gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
- gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
- gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
- gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
- gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
- gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
- gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
- gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
- gap/pkg/semigroups/tst/standard/README +2 -0
- gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
- gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
- gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
- gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
- gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
- gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
- gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
- gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
- gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
- gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
- gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
- gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
- gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
- gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
- gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
- gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
- gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
- gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
- gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
- gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
- gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
- gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
- gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
- gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
- gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
- gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
- gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
- gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
- gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
- gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
- gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
- gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
- gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
- gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
- gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
- gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
- gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
- gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
- gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
- gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
- gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
- gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
- gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
- gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
- gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
- gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
- gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
- gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
- gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
- gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
- gap/pkg/semigroups/tst/standard/options.tst +54 -0
- gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
- gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
- gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
- gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
- gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
- gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
- gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
- gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
- gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
- gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
- gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
- gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
- gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
- gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
- gap/pkg/semigroups/tst/testinstall.tst +1815 -0
- gap/pkg/semigroups/tst/teststandard.g +22 -0
- gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
- gap/pkg/semigroups/tst/workspaces/load.g +11 -0
- gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
- gap/pkg/semigroups/tst/workspaces/save.g +14 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
- passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
- passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
- sage/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
- sage/libs/gap_pkg_semigroups.abi3.so +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semiffmat.gd
|
|
4
|
+
## Copyright (C) 2013-2022 James D. Mitchell
|
|
5
|
+
## Markus Pfeiffer
|
|
6
|
+
##
|
|
7
|
+
## Licensing information can be found in the README file of this package.
|
|
8
|
+
##
|
|
9
|
+
#############################################################################
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
DeclareCategory("IsMatrixOverFiniteFieldSemigroup", IsSemigroup);
|
|
13
|
+
DeclareSynonym("IsMatrixOverFiniteFieldMonoid",
|
|
14
|
+
IsMonoid and IsMatrixOverFiniteFieldSemigroup);
|
|
15
|
+
|
|
16
|
+
InstallTrueMethod(CanComputeSize, IsMatrixOverFiniteFieldSemigroup);
|
|
17
|
+
InstallTrueMethod(IsFinite, IsMatrixOverFiniteFieldSemigroup);
|
|
18
|
+
|
|
19
|
+
DeclareAttribute("BaseDomain", IsMatrixOverFiniteFieldSemigroup);
|
|
20
|
+
DeclareAttribute("BaseDomain", IsMatrixOverFiniteFieldMonoid);
|
|
21
|
+
|
|
22
|
+
# (mp) This is defined for groups, and already difficult there, so I
|
|
23
|
+
# guess close to impossible to do in matrix semigroups
|
|
24
|
+
DeclareProperty("IsFullMatrixMonoid", IsSemigroup);
|
|
25
|
+
DeclareSynonymAttr("IsGeneralLinearMonoid", IsFullMatrixMonoid);
|
|
26
|
+
|
|
27
|
+
# Right action of a matrix over a field on a row space
|
|
28
|
+
DeclareGlobalFunction("MatrixOverFiniteFieldRowSpaceRightAction");
|
|
29
|
+
# Given two H-related matrices x and y, computes the element
|
|
30
|
+
# of the schutzenberger group of the matrices' H-class
|
|
31
|
+
# that maps im x to im y. Returns an invertible matrix
|
|
32
|
+
DeclareGlobalFunction("MatrixOverFiniteFieldSchutzGrpElement");
|
|
33
|
+
DeclareGlobalFunction("MatrixOverFiniteFieldStabilizerAction");
|
|
34
|
+
DeclareGlobalFunction("MatrixOverFiniteFieldLambdaConjugator");
|
|
35
|
+
DeclareGlobalFunction("MatrixOverFiniteFieldIdempotentTester");
|
|
36
|
+
DeclareGlobalFunction("MatrixOverFiniteFieldIdempotentCreator");
|
|
37
|
+
DeclareGlobalFunction("MatrixOverFiniteFieldLocalRightInverse");
|
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semiffmat.gi
|
|
4
|
+
## Copyright (C) 2015-2022 James D. Mitchell
|
|
5
|
+
## Markus Pfeiffer
|
|
6
|
+
##
|
|
7
|
+
## Licensing information can be found in the README file of this package.
|
|
8
|
+
##
|
|
9
|
+
#############################################################################
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
# Contents:
|
|
13
|
+
# 1. Isomorphisms for semigroups
|
|
14
|
+
# 2. Isomorphisms for monoids
|
|
15
|
+
# 3. Printing and viewing
|
|
16
|
+
# 4. Random
|
|
17
|
+
# 5. Methods for acting semigroup setup
|
|
18
|
+
# 6. Properties of matrix over finite field semigroups
|
|
19
|
+
|
|
20
|
+
#############################################################################
|
|
21
|
+
# 1. Isomorphisms for semigroups
|
|
22
|
+
#############################################################################
|
|
23
|
+
|
|
24
|
+
# fallback method: via a transformation semigroup
|
|
25
|
+
|
|
26
|
+
InstallMethod(IsomorphismSemigroup,
|
|
27
|
+
"for IsMatrixOverFiniteFieldSemigroup and a semigroup",
|
|
28
|
+
[IsMatrixOverFiniteFieldSemigroup, IsSemigroup],
|
|
29
|
+
SEMIGROUPS.DefaultIsomorphismSemigroup);
|
|
30
|
+
|
|
31
|
+
InstallMethod(IsomorphismSemigroup,
|
|
32
|
+
"for IsMatrixOverFiniteFieldSemigroup, a ring, and a semigroup",
|
|
33
|
+
[IsMatrixOverFiniteFieldSemigroup, IsRing, IsSemigroup],
|
|
34
|
+
function(filt, R, S)
|
|
35
|
+
local iso1, inv1, iso2, inv2;
|
|
36
|
+
|
|
37
|
+
if not (IsField(R) and IsFinite(R)) then
|
|
38
|
+
ErrorNoReturn("the 2nd argument (a ring) must be a finite field");
|
|
39
|
+
fi;
|
|
40
|
+
|
|
41
|
+
iso1 := IsomorphismTransformationSemigroup(S);
|
|
42
|
+
inv1 := InverseGeneralMapping(iso1);
|
|
43
|
+
iso2 := IsomorphismSemigroup(filt, R, Range(iso1));
|
|
44
|
+
inv2 := InverseGeneralMapping(iso2);
|
|
45
|
+
|
|
46
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
47
|
+
Range(iso2),
|
|
48
|
+
x -> (x ^ iso1) ^ iso2,
|
|
49
|
+
x -> (x ^ inv2) ^ inv1);
|
|
50
|
+
end);
|
|
51
|
+
|
|
52
|
+
InstallMethod(IsomorphismSemigroup,
|
|
53
|
+
"for IsMatrixOverFiniteFieldSemigroup and a finite field matrix semigroup",
|
|
54
|
+
[IsMatrixOverFiniteFieldSemigroup, IsMatrixOverFiniteFieldSemigroup],
|
|
55
|
+
{filt, S} -> SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc));
|
|
56
|
+
|
|
57
|
+
InstallMethod(IsomorphismSemigroup,
|
|
58
|
+
"for IsMatrixOverFiniteFieldSemigroup, ring, and matrix over ff semigroup",
|
|
59
|
+
[IsMatrixOverFiniteFieldSemigroup,
|
|
60
|
+
IsRing,
|
|
61
|
+
IsMatrixOverFiniteFieldSemigroup],
|
|
62
|
+
function(_, R, S)
|
|
63
|
+
local D, map, inv, T;
|
|
64
|
+
D := BaseDomain(Representative(S));
|
|
65
|
+
if D = R then
|
|
66
|
+
return SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc);
|
|
67
|
+
elif Size(D) <= Size(R) and IsIdenticalObj(FamilyObj(D), FamilyObj(R))
|
|
68
|
+
and DegreeOverPrimeField(R) mod DegreeOverPrimeField(D) = 0 then
|
|
69
|
+
map := x -> Matrix(R, x);
|
|
70
|
+
inv := x -> Matrix(D, x);
|
|
71
|
+
T := Semigroup(List(GeneratorsOfSemigroup(S), map));
|
|
72
|
+
return SemigroupIsomorphismByFunctionNC(S, T, map, inv);
|
|
73
|
+
fi;
|
|
74
|
+
TryNextMethod(); # take an isomorphism to a transformation semigroup
|
|
75
|
+
end);
|
|
76
|
+
|
|
77
|
+
# This is for converting semigroups of GAP library matrices over finite fields
|
|
78
|
+
# to IsMatrixOverFiniteFieldSemigroup
|
|
79
|
+
InstallMethod(IsomorphismSemigroup,
|
|
80
|
+
"for IsMatrixOverFiniteFieldSemigroup and a semigroup of matrices over a ff",
|
|
81
|
+
[IsMatrixOverFiniteFieldSemigroup,
|
|
82
|
+
IsSemigroup and HasGeneratorsOfSemigroup and IsFFECollCollColl],
|
|
83
|
+
function(_, S)
|
|
84
|
+
local R, map, T;
|
|
85
|
+
# The following line is required because of the weirdness in constructor
|
|
86
|
+
# method selection, if the method for IsMatrixOverFiniteFieldSemigroup was
|
|
87
|
+
# after this method, then the next 3 lines wouldn't be required, but at the
|
|
88
|
+
# same time that'd be less robust.
|
|
89
|
+
if IsMatrixOverFiniteFieldSemigroup(S) then
|
|
90
|
+
TryNextMethod();
|
|
91
|
+
fi;
|
|
92
|
+
R := DefaultFieldOfMatrix(Representative(S));
|
|
93
|
+
map := x -> Matrix(R, x);
|
|
94
|
+
T := Semigroup(List(GeneratorsOfSemigroup(S), map));
|
|
95
|
+
return SemigroupIsomorphismByFunctionNC(S, T, map, AsList);
|
|
96
|
+
end);
|
|
97
|
+
|
|
98
|
+
InstallMethod(IsomorphismSemigroup,
|
|
99
|
+
"for IsMatrixOverFiniteFieldSemigroup, a ring, and a ff mat. semigroup",
|
|
100
|
+
[IsMatrixOverFiniteFieldSemigroup,
|
|
101
|
+
IsRing,
|
|
102
|
+
IsSemigroup and HasGeneratorsOfSemigroup and IsFFECollCollColl],
|
|
103
|
+
function(_, R, S)
|
|
104
|
+
local D, map, T;
|
|
105
|
+
# The following line is required because of the weirdness in constructor
|
|
106
|
+
# method selection, if the method for IsMatrixOverFiniteFieldSemigroup was
|
|
107
|
+
# after this method, then the next 3 lines wouldn't be required, but at the
|
|
108
|
+
# same time that'd be less robust.
|
|
109
|
+
if IsMatrixOverFiniteFieldSemigroup(S) then
|
|
110
|
+
TryNextMethod();
|
|
111
|
+
fi;
|
|
112
|
+
D := BaseDomain(Representative(S));
|
|
113
|
+
if Size(D) <= Size(R) and IsIdenticalObj(FamilyObj(D), FamilyObj(R))
|
|
114
|
+
and DegreeOverPrimeField(R) mod DegreeOverPrimeField(D) = 0 then
|
|
115
|
+
map := x -> Matrix(R, x);
|
|
116
|
+
T := Semigroup(List(GeneratorsOfSemigroup(S), map));
|
|
117
|
+
return SemigroupIsomorphismByFunctionNC(S, T, map, AsList);
|
|
118
|
+
fi;
|
|
119
|
+
TryNextMethod();
|
|
120
|
+
end);
|
|
121
|
+
|
|
122
|
+
InstallMethod(IsomorphismSemigroup,
|
|
123
|
+
"for IsMatrixOverFiniteFieldSemigroup and transformation semigroup with gens",
|
|
124
|
+
[IsMatrixOverFiniteFieldSemigroup,
|
|
125
|
+
IsTransformationSemigroup and HasGeneratorsOfSemigroup],
|
|
126
|
+
{filt, S} -> IsomorphismSemigroup(IsMatrixOverFiniteFieldSemigroup, GF(2), S));
|
|
127
|
+
|
|
128
|
+
InstallMethod(IsomorphismSemigroup,
|
|
129
|
+
"for IsMatrixOverFiniteFieldSemigroup, a ring, and a transformation semigroup",
|
|
130
|
+
[IsMatrixOverFiniteFieldSemigroup,
|
|
131
|
+
IsRing,
|
|
132
|
+
IsTransformationSemigroup and HasGeneratorsOfSemigroup],
|
|
133
|
+
function(_, R, S)
|
|
134
|
+
local n, basis, map, iso, inv, gens;
|
|
135
|
+
|
|
136
|
+
if not (IsField(R) and IsFinite(R)) then
|
|
137
|
+
ErrorNoReturn("the 2nd argument (a ring) must be a finite field");
|
|
138
|
+
fi;
|
|
139
|
+
|
|
140
|
+
n := DegreeOfTransformationSemigroup(S);
|
|
141
|
+
# TODO(later) when GAP allows 0-dimensional matrices and Semigroups requires
|
|
142
|
+
# that version of GAP, then the following if-statement can be removed.
|
|
143
|
+
if n = 0 then
|
|
144
|
+
n := 1;
|
|
145
|
+
fi;
|
|
146
|
+
basis := IdentityMatrix(R, n);
|
|
147
|
+
map := x -> Unpack(basis){ImageListOfTransformation(x, n)};
|
|
148
|
+
iso := x -> Matrix(R, map(x));
|
|
149
|
+
inv := x -> Transformation([1 .. n], i -> PositionNonZero(x[i]));
|
|
150
|
+
gens := List(GeneratorsOfSemigroup(S), iso);
|
|
151
|
+
|
|
152
|
+
return SemigroupIsomorphismByFunctionNC(S, Semigroup(gens), iso, inv);
|
|
153
|
+
end);
|
|
154
|
+
|
|
155
|
+
#############################################################################
|
|
156
|
+
# 2. Isomorphisms for monoids
|
|
157
|
+
#############################################################################
|
|
158
|
+
|
|
159
|
+
InstallMethod(AsMonoid, "for a matrix over finite field semigroup",
|
|
160
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
161
|
+
function(S)
|
|
162
|
+
if MultiplicativeNeutralElement(S) = fail then
|
|
163
|
+
return fail; # so that we do the same as the GAP/ref manual says
|
|
164
|
+
fi;
|
|
165
|
+
return Range(IsomorphismMonoid(IsMatrixOverFiniteFieldMonoid, S));
|
|
166
|
+
end);
|
|
167
|
+
|
|
168
|
+
InstallMethod(IsomorphismMonoid,
|
|
169
|
+
"for IsMatrixOverFiniteFieldMonoid and a semigroup",
|
|
170
|
+
[IsMatrixOverFiniteFieldMonoid, IsSemigroup],
|
|
171
|
+
SEMIGROUPS.DefaultIsomorphismMonoid);
|
|
172
|
+
|
|
173
|
+
InstallMethod(IsomorphismMonoid,
|
|
174
|
+
"for IsMatrixOverFiniteFieldMonoid, a ring, and a semigroup",
|
|
175
|
+
[IsMatrixOverFiniteFieldMonoid, IsRing, IsSemigroup],
|
|
176
|
+
function(filt, R, S)
|
|
177
|
+
local iso1, inv1, iso2, inv2;
|
|
178
|
+
|
|
179
|
+
iso1 := IsomorphismTransformationMonoid(S);
|
|
180
|
+
inv1 := InverseGeneralMapping(iso1);
|
|
181
|
+
iso2 := IsomorphismMonoid(filt, R, Range(iso1));
|
|
182
|
+
inv2 := InverseGeneralMapping(iso2);
|
|
183
|
+
|
|
184
|
+
return SemigroupIsomorphismByFunctionNC(S,
|
|
185
|
+
Range(iso2),
|
|
186
|
+
x -> (x ^ iso1) ^ iso2,
|
|
187
|
+
x -> (x ^ inv2) ^ inv1);
|
|
188
|
+
end);
|
|
189
|
+
|
|
190
|
+
InstallMethod(IsomorphismMonoid,
|
|
191
|
+
"for IsMatrixOverFiniteFieldMonoid and a monoid",
|
|
192
|
+
[IsMatrixOverFiniteFieldMonoid, IsMonoid],
|
|
193
|
+
{filt, S} -> IsomorphismSemigroup(IsMatrixOverFiniteFieldSemigroup, S));
|
|
194
|
+
|
|
195
|
+
InstallMethod(IsomorphismMonoid,
|
|
196
|
+
"for IsMatrixOverFiniteFieldMonoid, a ring, and a monoid",
|
|
197
|
+
[IsMatrixOverFiniteFieldMonoid, IsRing, IsMonoid],
|
|
198
|
+
{filt, R, S} -> IsomorphismSemigroup(IsMatrixOverFiniteFieldSemigroup, R, S));
|
|
199
|
+
|
|
200
|
+
InstallMethod(IsomorphismMonoid,
|
|
201
|
+
"for IsMatrixOverFiniteFieldMonoid and a matrix over finite field monoid",
|
|
202
|
+
[IsMatrixOverFiniteFieldMonoid, IsMatrixOverFiniteFieldMonoid],
|
|
203
|
+
{filt, S} -> SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc));
|
|
204
|
+
|
|
205
|
+
InstallMethod(IsomorphismMonoid,
|
|
206
|
+
"for IsMatrixOverFiniteFieldMonoid, a ring, and a matrix over ff monoid",
|
|
207
|
+
[IsMatrixOverFiniteFieldMonoid, IsRing, IsMatrixOverFiniteFieldMonoid],
|
|
208
|
+
{filt, R, S} -> IsomorphismSemigroup(IsMatrixOverFiniteFieldSemigroup, R, S));
|
|
209
|
+
|
|
210
|
+
#############################################################################
|
|
211
|
+
# 3. Viewing and printing
|
|
212
|
+
#############################################################################
|
|
213
|
+
|
|
214
|
+
InstallMethod(SemigroupViewStringSuffix,
|
|
215
|
+
"for a matrix over finite field semigroup",
|
|
216
|
+
[IsMatrixOverFiniteFieldSemigroup],
|
|
217
|
+
function(S)
|
|
218
|
+
local n;
|
|
219
|
+
if UserPreference("semigroups", "ViewObj") <> "semigroups-pkg" then
|
|
220
|
+
TryNextMethod();
|
|
221
|
+
fi;
|
|
222
|
+
n := ViewString(NrRows(Representative(S)));
|
|
223
|
+
return Concatenation("\>\>", n, "x", n, "\< \>matrices\< \>over\< \>",
|
|
224
|
+
ViewString(BaseDomain(S)), "\<\< ");
|
|
225
|
+
end);
|
|
226
|
+
|
|
227
|
+
InstallMethod(ViewObj, "for a general linear monoid",
|
|
228
|
+
[IsGeneralLinearMonoid],
|
|
229
|
+
Maximum(RankFilter(IsMonoid and HasGeneratorsOfMonoid),
|
|
230
|
+
RankFilter(IsMatrixOverFiniteFieldSemigroup
|
|
231
|
+
and HasGeneratorsOfSemigroup))
|
|
232
|
+
- RankFilter(IsGeneralLinearMonoid) + 1,
|
|
233
|
+
function(S)
|
|
234
|
+
PrintFormatted("<general linear monoid {1}x{1} over {2}>",
|
|
235
|
+
NrRows(Representative(S)),
|
|
236
|
+
BaseDomain(S));
|
|
237
|
+
end);
|
|
238
|
+
|
|
239
|
+
InstallMethod(PrintString, "for general linear monoid",
|
|
240
|
+
[IsGeneralLinearMonoid],
|
|
241
|
+
7, # to beat the method for monoids with generators
|
|
242
|
+
function(M)
|
|
243
|
+
local rep, str;
|
|
244
|
+
|
|
245
|
+
rep := Representative(M);
|
|
246
|
+
str := Concatenation("GLM(",
|
|
247
|
+
String(NrRows(rep)),
|
|
248
|
+
", ",
|
|
249
|
+
String(Characteristic(BaseDomain(M))));
|
|
250
|
+
if Characteristic(BaseDomain(M)) <> 1 then
|
|
251
|
+
Append(str, " ^ ");
|
|
252
|
+
Append(str, String(Log(Size(BaseDomain(M)),
|
|
253
|
+
Characteristic(BaseDomain(M)))));
|
|
254
|
+
fi;
|
|
255
|
+
Append(str, ")");
|
|
256
|
+
return str;
|
|
257
|
+
end);
|
|
258
|
+
|
|
259
|
+
InstallMethod(PrintObj, "for general linear monoid",
|
|
260
|
+
[IsGeneralLinearMonoid],
|
|
261
|
+
7, # to beat the method for monoids with generators
|
|
262
|
+
function(M)
|
|
263
|
+
Print(PrintString(M));
|
|
264
|
+
end);
|
|
265
|
+
|
|
266
|
+
#############################################################################
|
|
267
|
+
# 4. Random
|
|
268
|
+
#############################################################################
|
|
269
|
+
|
|
270
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
271
|
+
[IsMatrixOverFiniteFieldSemigroup, IsList],
|
|
272
|
+
function(_, params)
|
|
273
|
+
|
|
274
|
+
if Length(params) < 1 then # nr gens
|
|
275
|
+
params[1] := Random(1, 20);
|
|
276
|
+
elif not IsPosInt(params[1]) then
|
|
277
|
+
return "the 2nd argument (number of generators) is not a pos int";
|
|
278
|
+
fi;
|
|
279
|
+
if Length(params) < 2 then # dimension
|
|
280
|
+
params[2] := Random(1, 20);
|
|
281
|
+
elif not IsPosInt(params[2]) then
|
|
282
|
+
return "the 3rd argument (matrix dimension) is not a pos int";
|
|
283
|
+
fi;
|
|
284
|
+
if Length(params) < 3 then # field
|
|
285
|
+
params[3] := GF(Random(Primes), Random(1, 9));
|
|
286
|
+
elif not IsField(params[3]) or not IsFinite(params[3]) then
|
|
287
|
+
return "the 4th argument is not a finite field";
|
|
288
|
+
fi;
|
|
289
|
+
if Length(params) < 4 then # ranks
|
|
290
|
+
params[4] := [1 .. params[2]];
|
|
291
|
+
elif not IsList(params[4])
|
|
292
|
+
or not ForAll(params[4], x -> IsPosInt(x) and x <= params[2]) then
|
|
293
|
+
return "the 5th argument (matrix ranks) is not a list of pos ints";
|
|
294
|
+
fi;
|
|
295
|
+
|
|
296
|
+
if Length(params) > 4 then
|
|
297
|
+
return "there must be at most 5 arguments";
|
|
298
|
+
fi;
|
|
299
|
+
|
|
300
|
+
return params;
|
|
301
|
+
end);
|
|
302
|
+
|
|
303
|
+
InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
|
|
304
|
+
[IsMatrixOverFiniteFieldMonoid, IsList],
|
|
305
|
+
{filt, params} ->
|
|
306
|
+
SEMIGROUPS_ProcessRandomArgsCons(IsMatrixOverFiniteFieldSemigroup, params));
|
|
307
|
+
|
|
308
|
+
InstallMethod(RandomSemigroupCons,
|
|
309
|
+
"for IsMatrixOverFiniteFieldSemigroup and list",
|
|
310
|
+
[IsMatrixOverFiniteFieldSemigroup, IsList],
|
|
311
|
+
function(_, params) # params = [nrgens, dim, field, ranks]
|
|
312
|
+
return Semigroup(List([1 .. params[1]], i -> RandomMatrix(params[3],
|
|
313
|
+
params[2],
|
|
314
|
+
params[4])));
|
|
315
|
+
end);
|
|
316
|
+
|
|
317
|
+
InstallMethod(RandomMonoidCons,
|
|
318
|
+
"for IsMatrixOverFiniteFieldMonoid and list",
|
|
319
|
+
[IsMatrixOverFiniteFieldMonoid, IsList],
|
|
320
|
+
function(_, params) # params = [nrgens, dim, field, ranks]
|
|
321
|
+
return Monoid(List([1 .. params[1]], i -> RandomMatrix(params[3],
|
|
322
|
+
params[2],
|
|
323
|
+
params[4])));
|
|
324
|
+
end);
|
|
325
|
+
|
|
326
|
+
InstallMethod(RandomInverseSemigroupCons,
|
|
327
|
+
"for IsMatrixOverFiniteFieldSemigroup and list",
|
|
328
|
+
[IsMatrixOverFiniteFieldSemigroup, IsList],
|
|
329
|
+
function(filt, params)
|
|
330
|
+
return AsSemigroup(filt,
|
|
331
|
+
params[3],
|
|
332
|
+
RandomInverseSemigroup(IsPartialPermSemigroup,
|
|
333
|
+
params[1],
|
|
334
|
+
params[2]));
|
|
335
|
+
end);
|
|
336
|
+
|
|
337
|
+
InstallMethod(RandomInverseMonoidCons,
|
|
338
|
+
"for IsMatrixOverFiniteFieldMonoid and list",
|
|
339
|
+
[IsMatrixOverFiniteFieldMonoid, IsList],
|
|
340
|
+
function(filt, params)
|
|
341
|
+
return AsMonoid(filt,
|
|
342
|
+
params[3],
|
|
343
|
+
RandomInverseMonoid(IsPartialPermMonoid,
|
|
344
|
+
params[1],
|
|
345
|
+
params[2]));
|
|
346
|
+
end);
|
|
347
|
+
|
|
348
|
+
InstallMethod(BaseDomain, "for a matrix over finite field semigroup",
|
|
349
|
+
[IsMatrixOverFiniteFieldSemigroup], S -> BaseDomain(Representative(S)));
|
|
350
|
+
|
|
351
|
+
InstallMethod(IsGeneratorsOfInverseSemigroup,
|
|
352
|
+
"for an ffe coll coll coll ",
|
|
353
|
+
[IsFFECollCollColl],
|
|
354
|
+
coll -> IsGeneratorsOfSemigroup(coll) and ForAll(coll, x -> x ^ -1 <> fail));
|
|
355
|
+
|
|
356
|
+
#############################################################################
|
|
357
|
+
# 5. Methods for acting semigroups setup
|
|
358
|
+
#############################################################################
|
|
359
|
+
|
|
360
|
+
InstallGlobalFunction(MatrixOverFiniteFieldRowSpaceRightAction,
|
|
361
|
+
function(_, vsp, m)
|
|
362
|
+
local nvsp, deg, i;
|
|
363
|
+
|
|
364
|
+
Assert(1, IsRowBasisOverFiniteField(vsp));
|
|
365
|
+
Assert(1, IsMatrixObjOverFiniteField(m));
|
|
366
|
+
Assert(1, Rank(vsp) > 0);
|
|
367
|
+
|
|
368
|
+
# This takes care of the token element
|
|
369
|
+
if Rank(vsp) > NrRows(m) then
|
|
370
|
+
return RowSpaceBasis(m);
|
|
371
|
+
else
|
|
372
|
+
nvsp := Unpack(vsp!.rows * m);
|
|
373
|
+
fi;
|
|
374
|
+
TriangulizeMat(nvsp);
|
|
375
|
+
|
|
376
|
+
deg := Length(nvsp);
|
|
377
|
+
for i in [deg, deg - 1 .. 1] do
|
|
378
|
+
if IsZero(nvsp[i]) then
|
|
379
|
+
Remove(nvsp, i);
|
|
380
|
+
fi;
|
|
381
|
+
od;
|
|
382
|
+
|
|
383
|
+
return NewRowBasisOverFiniteField(IsPlistRowBasisOverFiniteFieldRep,
|
|
384
|
+
BaseDomain(vsp),
|
|
385
|
+
nvsp);
|
|
386
|
+
end);
|
|
387
|
+
|
|
388
|
+
InstallGlobalFunction(MatrixOverFiniteFieldLocalRightInverse,
|
|
389
|
+
function(S, V, mat)
|
|
390
|
+
local n, k, W, se, zv, u, j, i;
|
|
391
|
+
|
|
392
|
+
Assert(1, IsMatrixOverFiniteFieldSemigroup(S));
|
|
393
|
+
Assert(1, IsRowBasisOverFiniteField(V));
|
|
394
|
+
Assert(1, IsMatrixObjOverFiniteField(mat));
|
|
395
|
+
Assert(1, NrRows(mat) > 0);
|
|
396
|
+
Assert(1, Rank(V) > 0);
|
|
397
|
+
|
|
398
|
+
n := NrRows(mat);
|
|
399
|
+
k := Rank(V);
|
|
400
|
+
|
|
401
|
+
W := Unpack(V!.rows * mat);
|
|
402
|
+
|
|
403
|
+
for i in [1 .. k] do
|
|
404
|
+
Append(W[i], V!.rows[i]);
|
|
405
|
+
od;
|
|
406
|
+
se := SemiEchelonMat(W);
|
|
407
|
+
# If the matrix does not act injectively on V, then there is no right inverse
|
|
408
|
+
# TODO(later) I think we can now simplify things below
|
|
409
|
+
if Number(se.heads{[1 .. n]}, IsZero) > n - k then
|
|
410
|
+
return fail;
|
|
411
|
+
fi;
|
|
412
|
+
|
|
413
|
+
for i in [1 .. Length(se.vectors)] do
|
|
414
|
+
W[i] := ShallowCopy(se.vectors[i]);
|
|
415
|
+
od;
|
|
416
|
+
|
|
417
|
+
zv := [1 .. 2 * n] * Zero(BaseDomain(mat));
|
|
418
|
+
for i in [1 .. n - Length(W)] do
|
|
419
|
+
Add(W, ShallowCopy(zv));
|
|
420
|
+
od;
|
|
421
|
+
|
|
422
|
+
# add missing heads
|
|
423
|
+
u := One(BaseDomain(mat));
|
|
424
|
+
j := k + 1;
|
|
425
|
+
for i in [1 .. n] do
|
|
426
|
+
if se.heads[i] = 0 then
|
|
427
|
+
W[j][i] := u;
|
|
428
|
+
W[j][n + i] := u;
|
|
429
|
+
j := j + 1;
|
|
430
|
+
fi;
|
|
431
|
+
od;
|
|
432
|
+
TriangulizeMat(W);
|
|
433
|
+
|
|
434
|
+
return Matrix(W{[1 .. n]}{[n + 1 .. 2 * n]}, mat);
|
|
435
|
+
end);
|
|
436
|
+
|
|
437
|
+
# Returns an invertible matrix.
|
|
438
|
+
# TODO(later): make pretty and efficient (in that order). In particular the
|
|
439
|
+
# setup for the matrix should be much more efficient.
|
|
440
|
+
InstallGlobalFunction(MatrixOverFiniteFieldSchutzGrpElement,
|
|
441
|
+
function(_, x, y)
|
|
442
|
+
local deg, n, eqs, idx, col, row, res;
|
|
443
|
+
|
|
444
|
+
Assert(1, IsMatrixObjOverFiniteField(x));
|
|
445
|
+
Assert(1, IsMatrixObjOverFiniteField(y));
|
|
446
|
+
|
|
447
|
+
n := Rank(x);
|
|
448
|
+
deg := NrRows(x);
|
|
449
|
+
|
|
450
|
+
eqs := TransposedMatMutable(Concatenation(TransposedMat(x),
|
|
451
|
+
TransposedMat(y)));
|
|
452
|
+
TriangulizeMat(eqs);
|
|
453
|
+
|
|
454
|
+
idx := [];
|
|
455
|
+
col := 1;
|
|
456
|
+
row := 1;
|
|
457
|
+
|
|
458
|
+
while col <= deg do
|
|
459
|
+
while IsZero(eqs[row, col]) and col <= deg do
|
|
460
|
+
col := col + 1;
|
|
461
|
+
od;
|
|
462
|
+
if col <= deg then
|
|
463
|
+
Add(idx, col);
|
|
464
|
+
row := row + 1;
|
|
465
|
+
col := col + 1;
|
|
466
|
+
fi;
|
|
467
|
+
od;
|
|
468
|
+
res := Matrix(BaseDomain(x), eqs{[1 .. n]}{idx + deg});
|
|
469
|
+
Assert(1, res ^ (-1) <> fail);
|
|
470
|
+
return res;
|
|
471
|
+
end);
|
|
472
|
+
|
|
473
|
+
# StabilizerAction
|
|
474
|
+
InstallGlobalFunction(MatrixOverFiniteFieldStabilizerAction,
|
|
475
|
+
function(_, x, m)
|
|
476
|
+
local n, k, rsp, zv, i;
|
|
477
|
+
Assert(1, IsMatrixObjOverFiniteField(x));
|
|
478
|
+
Assert(1, IsFFECollColl(m));
|
|
479
|
+
Assert(1, not IsZero(x));
|
|
480
|
+
Assert(1, not IsZero(m));
|
|
481
|
+
|
|
482
|
+
n := NrRows(m);
|
|
483
|
+
k := Rank(x);
|
|
484
|
+
rsp := ShallowCopy(m * RowSpaceBasis(x)!.rows);
|
|
485
|
+
|
|
486
|
+
zv := [1 .. n] * Zero(BaseDomain(x));
|
|
487
|
+
for i in [1 .. n - k] do
|
|
488
|
+
Add(rsp, ShallowCopy(zv));
|
|
489
|
+
od;
|
|
490
|
+
|
|
491
|
+
return Matrix(RowSpaceTransformationInv(x) * rsp, x);
|
|
492
|
+
end);
|
|
493
|
+
|
|
494
|
+
# This should be doable in a much more efficient way
|
|
495
|
+
InstallGlobalFunction(MatrixOverFiniteFieldLambdaConjugator,
|
|
496
|
+
function(_, x, y)
|
|
497
|
+
local xse, h, p, yse, q;
|
|
498
|
+
Assert(1, IsMatrixObjOverFiniteField(x));
|
|
499
|
+
Assert(1, IsMatrixObjOverFiniteField(y));
|
|
500
|
+
xse := SemiEchelonMat(Unpack(x));
|
|
501
|
+
h := Filtered(xse.heads, x -> x <> 0);
|
|
502
|
+
p := One(BaseDomain(x))
|
|
503
|
+
* PermutationMat(SortingPerm(h), Length(h), BaseDomain(x));
|
|
504
|
+
yse := SemiEchelonMat(Unpack(y));
|
|
505
|
+
h := Filtered(yse.heads, x -> x <> 0);
|
|
506
|
+
q := One(BaseDomain(y))
|
|
507
|
+
* PermutationMat(SortingPerm(h), Length(h), BaseDomain(y));
|
|
508
|
+
return p * q ^ (-1);
|
|
509
|
+
end);
|
|
510
|
+
|
|
511
|
+
# Is there a complete direct way of testing whether this idempotent exists
|
|
512
|
+
# (without constructing it)? The method below is already pretty efficient.
|
|
513
|
+
|
|
514
|
+
InstallGlobalFunction(MatrixOverFiniteFieldIdempotentTester,
|
|
515
|
+
function(_, x, y)
|
|
516
|
+
Assert(1, IsPlistRowBasisOverFiniteFieldRep(x));
|
|
517
|
+
Assert(1, IsPlistRowBasisOverFiniteFieldRep(y));
|
|
518
|
+
return MatrixOverFiniteFieldIdempotentCreator(_, x, y) <> fail;
|
|
519
|
+
end);
|
|
520
|
+
|
|
521
|
+
# Attempt to construct an idempotent m with RowSpace(m) = x
|
|
522
|
+
# ColumnSpace(m) = y
|
|
523
|
+
|
|
524
|
+
InstallGlobalFunction(MatrixOverFiniteFieldIdempotentCreator,
|
|
525
|
+
function(S, x, y)
|
|
526
|
+
local m, inv;
|
|
527
|
+
|
|
528
|
+
Assert(1, IsMatrixOverFiniteFieldSemigroup(S));
|
|
529
|
+
Assert(1, IsRowBasisOverFiniteField(x));
|
|
530
|
+
Assert(1, Rank(x) <> 0);
|
|
531
|
+
Assert(1, IsRowBasisOverFiniteField(y));
|
|
532
|
+
Assert(1, Rank(y) <> 0);
|
|
533
|
+
Assert(1, Length(x!.rows[1]) = Length(y!.rows[1]));
|
|
534
|
+
|
|
535
|
+
m := Matrix(BaseDomain(S), TransposedMat(y!.rows) * x!.rows);
|
|
536
|
+
inv := MatrixOverFiniteFieldLocalRightInverse(S, x, m);
|
|
537
|
+
if inv = fail then
|
|
538
|
+
return fail;
|
|
539
|
+
fi;
|
|
540
|
+
return m * inv;
|
|
541
|
+
end);
|
|
542
|
+
|
|
543
|
+
InstallMethod(IsGeneratorsOfSemigroup, "for an ffe coll coll coll",
|
|
544
|
+
[IsFFECollCollColl],
|
|
545
|
+
function(coll)
|
|
546
|
+
local rep;
|
|
547
|
+
Assert(1, not IsEmpty(coll));
|
|
548
|
+
rep := Representative(coll);
|
|
549
|
+
if IsMatrixObjOverFiniteField(rep) then
|
|
550
|
+
return ForAll(coll, x -> NrRows(x) = NrRows(coll[1])
|
|
551
|
+
and BaseDomain(x) = BaseDomain(coll[1])
|
|
552
|
+
and NrRows(x) = NrCols(x));
|
|
553
|
+
fi;
|
|
554
|
+
TryNextMethod();
|
|
555
|
+
end);
|
|
556
|
+
|
|
557
|
+
#############################################################################
|
|
558
|
+
# 6. Properties of matrix over finite field semigroups
|
|
559
|
+
#############################################################################
|
|
560
|
+
|
|
561
|
+
# FIXME(later) this method is not correct (although it works as documented)
|
|
562
|
+
# This should check whether <S> = GLM of the right dimensions/field
|
|
563
|
+
|
|
564
|
+
InstallMethod(IsFullMatrixMonoid, "for a semigroup",
|
|
565
|
+
[IsSemigroup], ReturnFalse);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#############################################################################
|
|
2
|
+
##
|
|
3
|
+
## semigroups/semifp.gd
|
|
4
|
+
## Copyright (C) 2020-2022 Luke Elliott
|
|
5
|
+
##
|
|
6
|
+
## Licensing information can be found in the README file of this package.
|
|
7
|
+
##
|
|
8
|
+
#############################################################################
|
|
9
|
+
##
|
|
10
|
+
|
|
11
|
+
DeclareOperation("ElementOfFpSemigroup", [IsFpSemigroup, IsAssocWord]);
|
|
12
|
+
DeclareOperation("ElementOfFpMonoid", [IsFpMonoid, IsAssocWord]);
|
|
13
|
+
DeclareOperation("ParseRelations", [IsDenseList, IsString]);
|
|
14
|
+
DeclareAttribute("UnderlyingCongruence", IsFpSemigroup);
|
|
15
|
+
DeclareAttribute("UnderlyingCongruence", IsFpMonoid);
|
|
16
|
+
DeclareAttribute("Length", IsFpSemigroup);
|
|
17
|
+
DeclareAttribute("Length", IsFpMonoid);
|
|
18
|
+
|
|
19
|
+
DeclareSynonym("IsSubsemigroupOfFpMonoid",
|
|
20
|
+
IsSemigroup and IsElementOfFpMonoidCollection);
|
|
21
|
+
|
|
22
|
+
DeclareAttribute("EmbeddingFpMonoid", IsFpSemigroup);
|
|
23
|
+
|
|
24
|
+
DeclareOperation("ReversedOp", [IsElementOfFpSemigroup]);
|
|
25
|
+
DeclareOperation("ReversedOp", [IsElementOfFpMonoid]);
|
|
26
|
+
|
|
27
|
+
DeclareGlobalFunction("FreeMonoidAndAssignGeneratorVars");
|
|
28
|
+
DeclareGlobalFunction("FreeSemigroupAndAssignGeneratorVars");
|