passagemath-gap-pkg-semigroups 10.6.30__cp312-abi3-macosx_13_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.

Files changed (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1158 -0
  17. gap/pkg/semigroups/config.status +1131 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.30.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. 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");