passagemath-gap-pkg-semigroups 10.6.30__cp310-cp310-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.cpython-310-darwin.so +0 -0
@@ -0,0 +1,1094 @@
1
+ ###########################################################################
2
+ ##
3
+ ## main/setup.gi
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ ###############################################################################
12
+ # Setup - install the basic things required for specific acting semigroups #
13
+ ###############################################################################
14
+
15
+ # IsGeneratorsOfActingSemigroup
16
+
17
+ InstallMethod(IsGeneratorsOfActingSemigroup, "for a list or collection",
18
+ [IsListOrCollection], ReturnFalse);
19
+
20
+ # In the below can't do ReturnTrue, since GAP insists that we use
21
+ # InstallTrueMethod.
22
+ #
23
+ # InstallTrueMethod(IsGeneratorsOfActingSemigroup, IsTransformationCollection);
24
+ #
25
+ # can't do InstallTrueMethod for the above since this is not picked up
26
+ # if Semigroups is loaded after any transformation semigroup has been created.
27
+ # It seems that since IsTransformationCollection has had its implied filters
28
+ # installed, if we add an additional implied filter
29
+ # IsGeneratorsOfActingSemigroup, then this is ignored. I think this is a bug.
30
+
31
+ InstallMethod(IsGeneratorsOfActingSemigroup, "for a transformation collection",
32
+ [IsTransformationCollection], x -> true); # gaplint: disable=W036
33
+
34
+ InstallMethod(IsGeneratorsOfActingSemigroup, "for a partial perm collection",
35
+ [IsPartialPermCollection], x -> true); # gaplint: disable=W036
36
+
37
+ InstallMethod(IsGeneratorsOfActingSemigroup, "for a bipartition collection",
38
+ [IsBipartitionCollection], x -> true); # gaplint: disable=W036
39
+
40
+ InstallMethod(IsGeneratorsOfActingSemigroup,
41
+ "for a Rees 0-matrix semigroup element collection",
42
+ [IsReesZeroMatrixSemigroupElementCollection],
43
+ function(coll)
44
+ local R;
45
+ R := ReesMatrixSemigroupOfFamily(FamilyObj(Representative(coll)));
46
+ return IsPermGroup(UnderlyingSemigroup(R)) and IsRegularSemigroup(R);
47
+ end);
48
+
49
+ InstallMethod(IsGeneratorsOfActingSemigroup,
50
+ "for a McAlister triple element collection",
51
+ [IsMcAlisterTripleSemigroupElementCollection],
52
+ function(coll)
53
+ return
54
+ IsPermGroup(McAlisterTripleSemigroupGroup(MTSEParent(Representative(coll))));
55
+ end);
56
+
57
+ InstallMethod(IsGeneratorsOfActingSemigroup,
58
+ "for an ffe coll coll coll",
59
+ # TODO(MatrixObj-later) is this the best way to recognise a collection of
60
+ # MatrixObj?
61
+ [IsFFECollCollColl],
62
+ function(coll)
63
+ return IsGeneratorsOfSemigroup(coll)
64
+ and (IsEmpty(coll) or ForAll(coll, IsMatrixObjOverFiniteField));
65
+ end);
66
+
67
+ InstallTrueMethod(IsGeneratorsOfActingSemigroup,
68
+ IsMatrixOverFiniteFieldSemigroup);
69
+
70
+ # the largest point involved in the action
71
+
72
+ InstallMethod(ActionDegree, "for a transformation",
73
+ [IsTransformation], DegreeOfTransformation);
74
+
75
+ InstallMethod(ActionDegree, "for a partial perm",
76
+ [IsPartialPerm], x -> Maximum(DegreeOfPartialPerm(x),
77
+ CodegreeOfPartialPerm(x)));
78
+
79
+ InstallMethod(ActionDegree, "for a bipartition",
80
+ [IsBipartition], DegreeOfBipartition);
81
+
82
+ InstallMethod(ActionDegree, "for a Rees 0-matrix semigroup element",
83
+ [IsReesZeroMatrixSemigroupElement],
84
+ function(x)
85
+ if x![1] = 0 then
86
+ return 0;
87
+ fi;
88
+ return NrMovedPoints(x![2]) + 1;
89
+ end);
90
+
91
+ InstallMethod(ActionDegree, "for a McAlister semigroup element",
92
+ [IsMcAlisterTripleSemigroupElement],
93
+ x -> 0);
94
+
95
+ InstallMethod(ActionDegree, "for a matrix obj", [IsMatrixObj],
96
+ function(m)
97
+ if not IsMatrixObjOverFiniteField(m) then
98
+ TryNextMethod();
99
+ fi;
100
+ return NrRows(m);
101
+ end);
102
+
103
+ InstallMethod(ActionDegree, "for a transformation collection",
104
+ [IsTransformationCollection], DegreeOfTransformationCollection);
105
+
106
+ InstallMethod(ActionDegree, "for a partial perm collection",
107
+ [IsPartialPermCollection], x -> Maximum(DegreeOfPartialPermCollection(x),
108
+ CodegreeOfPartialPermCollection(x)));
109
+
110
+ InstallMethod(ActionDegree, "for a bipartition collection",
111
+ [IsBipartitionCollection], DegreeOfBipartitionCollection);
112
+
113
+ InstallMethod(ActionDegree, "for a Rees 0-matrix semigroup element collection",
114
+ [IsReesZeroMatrixSemigroupElementCollection],
115
+ function(coll)
116
+ local R;
117
+ if ForAny(coll, x -> x![1] <> 0) then
118
+ R := ReesMatrixSemigroupOfFamily(FamilyObj(Representative(coll)));
119
+ return NrMovedPoints(UnderlyingSemigroup(R)) + 1;
120
+ fi;
121
+ return 0;
122
+ end);
123
+
124
+ InstallMethod(ActionDegree, "for a ffe coll coll coll",
125
+ [IsFFECollCollColl],
126
+ function(coll)
127
+ Assert(1, ForAll(coll, IsMatrixObjOverFiniteField));
128
+ return NrRows(Representative(coll));
129
+ end);
130
+
131
+ InstallMethod(ActionDegree, "for a McAlister semigroup element collection",
132
+ [IsMcAlisterTripleSemigroupElementCollection],
133
+ coll -> MaximumList(List(coll, ActionDegree)));
134
+
135
+ InstallMethod(ActionDegree, "for a transformation semigroup",
136
+ [IsTransformationSemigroup], DegreeOfTransformationSemigroup);
137
+
138
+ InstallMethod(ActionDegree, "for a partial perm semigroup",
139
+ [IsPartialPermSemigroup], x -> Maximum(DegreeOfPartialPermSemigroup(x),
140
+ CodegreeOfPartialPermSemigroup(x)));
141
+
142
+ InstallMethod(ActionDegree, "for a partial perm inverse semigroup",
143
+ [IsPartialPermSemigroup and IsInverseSemigroup], DegreeOfPartialPermSemigroup);
144
+
145
+ InstallMethod(ActionDegree, "for a bipartition semigroup",
146
+ [IsBipartitionSemigroup], DegreeOfBipartitionSemigroup);
147
+
148
+ InstallMethod(ActionDegree, "for a Rees 0-matrix subsemigroup with generators",
149
+ [IsReesZeroMatrixSubsemigroup and HasGeneratorsOfSemigroup],
150
+ function(R)
151
+ local parent;
152
+ if ForAny(GeneratorsOfSemigroup(R), x -> x![1] <> 0) then
153
+ parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
154
+ return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
155
+ fi;
156
+ return 0;
157
+ end);
158
+
159
+ InstallMethod(ActionDegree, "for a McAlister triple subsemigroup",
160
+ [IsMcAlisterTripleSubsemigroup],
161
+ S -> 0);
162
+
163
+ InstallMethod(ActionDegree, "for a matrix over finite field semigroup",
164
+ [IsMatrixOverFiniteFieldSemigroup],
165
+ S -> ActionDegree(Representative(S)));
166
+
167
+ # the number of points in the range of the action
168
+
169
+ InstallMethod(ActionRank, "for a transformation and integer",
170
+ [IsTransformation, IsInt], RANK_TRANS_INT);
171
+
172
+ InstallMethod(ActionRank, "for a transformation semigroup",
173
+ [IsTransformationSemigroup],
174
+ S -> f -> RANK_TRANS_INT(f, DegreeOfTransformationSemigroup(S)));
175
+
176
+ InstallMethod(ActionRank, "for a partial perm and integer",
177
+ [IsPartialPerm, IsInt],
178
+ {f, n} -> RankOfPartialPerm(f));
179
+
180
+ InstallMethod(ActionRank, "for a partial perm semigroup",
181
+ [IsPartialPermSemigroup],
182
+ S -> RankOfPartialPerm);
183
+
184
+ InstallMethod(ActionRank, "for a bipartition and integer",
185
+ [IsBipartition, IsInt], BIPART_RANK);
186
+
187
+ InstallMethod(ActionRank, "for a bipartition semigroup",
188
+ [IsBipartitionSemigroup],
189
+ S -> RankOfBipartition);
190
+
191
+ InstallMethod(ActionRank,
192
+ "for a Rees 0-matrix semigroup element and integer",
193
+ [IsReesZeroMatrixSemigroupElement, IsInt],
194
+ function(f, _)
195
+ local parent;
196
+ if f![1] = 0 then
197
+ return 0;
198
+ fi;
199
+ parent := ReesMatrixSemigroupOfFamily(FamilyObj(f));
200
+ return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
201
+ end);
202
+
203
+ InstallMethod(ActionRank, "for a Rees 0-matrix subsemigroup",
204
+ [IsReesZeroMatrixSubsemigroup],
205
+ function(R)
206
+ return function(x)
207
+ local parent;
208
+ if x![1] = 0 then
209
+ return 0;
210
+ else
211
+ parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
212
+ return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
213
+ fi;
214
+ end;
215
+ end);
216
+
217
+ InstallMethod(ActionRank, "for a McAlister triple semigroup element and int",
218
+ [IsMcAlisterTripleSemigroupElement, IsInt],
219
+ {f, n} -> f[1]);
220
+
221
+ InstallMethod(ActionRank, "for a McAlister triple subsemigroup",
222
+ [IsMcAlisterTripleSubsemigroup],
223
+ S -> x -> ActionDegree(S));
224
+
225
+ InstallMethod(ActionRank, "for a matrix object and integer",
226
+ [IsMatrixObj, IsInt],
227
+ function(x, _)
228
+ if not IsMatrixObjOverFiniteField(x) then
229
+ TryNextMethod();
230
+ fi;
231
+ return Rank(RowSpaceBasis(x));
232
+ end);
233
+
234
+ InstallMethod(ActionRank, "for a matrix semigroup",
235
+ [IsMatrixOverFiniteFieldSemigroup],
236
+ S -> x -> Rank(RowSpaceBasis(x)));
237
+
238
+ # the minimum possible rank of an element
239
+
240
+ InstallMethod(MinActionRank, "for a transformation semigroup",
241
+ [IsTransformationSemigroup], x -> 1);
242
+
243
+ InstallMethod(MinActionRank, "for a partial perm semigroup",
244
+ [IsPartialPermSemigroup], x -> 0);
245
+
246
+ InstallMethod(MinActionRank, "for a bipartition semigroup",
247
+ [IsBipartitionSemigroup], x -> 0);
248
+
249
+ InstallMethod(MinActionRank, "for a Rees 0-matrix subsemigroup",
250
+ [IsReesZeroMatrixSubsemigroup], x -> 0);
251
+
252
+ InstallMethod(MinActionRank, "for a McAlister triple subsemigroup",
253
+ [IsMcAlisterTripleSubsemigroup], x -> 1);
254
+
255
+ InstallMethod(MinActionRank, "for a matrix semigroup",
256
+ [IsMatrixOverFiniteFieldSemigroup], x -> 0);
257
+
258
+ # options passed to LambdaOrb(S) when it is created
259
+
260
+ InstallMethod(LambdaOrbOpts, "for a transformation semigroup",
261
+ [IsTransformationSemigroup], S -> rec(forflatplainlists := true));
262
+
263
+ InstallMethod(LambdaOrbOpts, "for a partial perm semigroup",
264
+ [IsPartialPermSemigroup], S -> rec(forflatplainlists := true));
265
+
266
+ InstallMethod(LambdaOrbOpts, "for a bipartition semigroup",
267
+ [IsBipartitionSemigroup], S -> rec());
268
+
269
+ InstallMethod(LambdaOrbOpts, "for a Rees 0-matrix subsemigroup",
270
+ [IsReesZeroMatrixSubsemigroup], S -> rec());
271
+
272
+ InstallMethod(LambdaOrbOpts, "for a McAlister triple subsemigroup",
273
+ [IsMcAlisterTripleSubsemigroup], S -> rec());
274
+
275
+ InstallMethod(LambdaOrbOpts, "for a matrix semigroup",
276
+ [IsMatrixOverFiniteFieldSemigroup], S -> rec());
277
+
278
+ InstallMethod(RhoOrbOpts, "for a transformation semigroup",
279
+ [IsTransformationSemigroup], S -> rec(forflatplainlists := true));
280
+
281
+ InstallMethod(RhoOrbOpts, "for a partial perm semigroup",
282
+ [IsPartialPermSemigroup], S -> rec(forflatplainlists := true));
283
+
284
+ InstallMethod(RhoOrbOpts, "for a bipartition semigroup",
285
+ [IsBipartitionSemigroup], S -> rec());
286
+
287
+ InstallMethod(RhoOrbOpts, "for a Rees 0-matrix subsemigroup",
288
+ [IsReesZeroMatrixSubsemigroup], S -> rec());
289
+
290
+ InstallMethod(RhoOrbOpts, "for a McAlister triple subsemigroup",
291
+ [IsMcAlisterTripleSubsemigroup], S -> rec());
292
+
293
+ InstallMethod(RhoOrbOpts, "for a matrix semigroup",
294
+ [IsMatrixOverFiniteFieldSemigroup], S -> rec());
295
+
296
+ # the lambda and rho acts
297
+ InstallMethod(LambdaAct, "for a transformation semigroup",
298
+ [IsTransformationSemigroup],
299
+ S -> {set, f} -> OnPosIntSetsTrans(set, f, DegreeOfTransformationSemigroup(S)));
300
+
301
+ InstallMethod(LambdaAct, "for a partial perm semigroup",
302
+ [IsPartialPermSemigroup], x -> OnPosIntSetsPartialPerm);
303
+
304
+ InstallMethod(LambdaAct, "for a bipartition semigroup",
305
+ [IsBipartitionSemigroup], x -> BLOCKS_RIGHT_ACT);
306
+
307
+ InstallMethod(LambdaAct, "for a Rees 0-matrix subsemigroup",
308
+ [IsReesZeroMatrixSubsemigroup], x -> function(pt, x)
309
+ if x![1] = 0 or pt = 0 then
310
+ return 0;
311
+ elif pt = -1 or x![4][pt][x![1]] <> 0 then
312
+ return x![3];
313
+ else
314
+ return 0;
315
+ fi;
316
+ end);
317
+
318
+ InstallMethod(LambdaAct, "for a McAlister triple subsemigroup",
319
+ [IsMcAlisterTripleSubsemigroup],
320
+ function(S)
321
+ local act, digraph;
322
+ S := MTSEParent(Representative(S));
323
+ act := McAlisterTripleSemigroupAction(S);
324
+ digraph := McAlisterTripleSemigroupPartialOrder(S);
325
+ return
326
+ function(pt, x)
327
+ if pt = 0 then
328
+ return act(x[1], x[2] ^ -1);
329
+ fi;
330
+ return PartialOrderDigraphJoinOfVertices(digraph,
331
+ act(pt, x[2] ^ -1),
332
+ act(x[1], x[2] ^ -1));
333
+ end;
334
+ end);
335
+
336
+ InstallMethod(LambdaAct, "for a matrix over finite field semigroup",
337
+ [IsMatrixOverFiniteFieldSemigroup],
338
+ S -> {vsp, mat} -> MatrixOverFiniteFieldRowSpaceRightAction(S, vsp, mat));
339
+
340
+ InstallMethod(RhoAct, "for a transformation semigroup",
341
+ [IsTransformationSemigroup],
342
+ S ->
343
+ {set, f} -> ON_KERNEL_ANTI_ACTION(set, f, DegreeOfTransformationSemigroup(S)));
344
+
345
+ InstallMethod(RhoAct, "for a partial perm semigroup",
346
+ [IsPartialPermSemigroup], S ->
347
+ {set, f} -> OnPosIntSetsPartialPerm(set, f ^ -1));
348
+
349
+ InstallMethod(RhoAct, "for a partial perm semigroup",
350
+ [IsBipartitionSemigroup], x -> BLOCKS_LEFT_ACT);
351
+
352
+ InstallMethod(RhoAct, "for a Rees 0-matrix subsemigroup",
353
+ [IsReesZeroMatrixSubsemigroup], x -> function(pt, x)
354
+ if x![1] = 0 or pt = 0 then
355
+ return 0;
356
+ elif pt = -1 or x![4][x![3]][pt] <> 0 then
357
+ return x![1];
358
+ else
359
+ return 0;
360
+ fi;
361
+ end);
362
+
363
+ InstallMethod(RhoAct, "for a McAlister triple subsemigroup",
364
+ [IsMcAlisterTripleSubsemigroup],
365
+ function(S)
366
+ local act, digraph;
367
+ S := MTSEParent(Representative(S));
368
+ act := McAlisterTripleSemigroupAction(S);
369
+ digraph := McAlisterTripleSemigroupPartialOrder(S);
370
+ return
371
+ function(pt, x)
372
+ if pt = 0 then
373
+ return x[1];
374
+ fi;
375
+ return PartialOrderDigraphJoinOfVertices(digraph,
376
+ act(pt, x[2]),
377
+ x[1]);
378
+ end;
379
+ end);
380
+
381
+ InstallMethod(RhoAct, "for a matrix semigroup",
382
+ [IsMatrixOverFiniteFieldSemigroup],
383
+ S -> {vsp, mat} -> LambdaAct(S)(vsp, TransposedMat(mat)));
384
+
385
+ # the seed or dummy start point for LambdaOrb
386
+
387
+ InstallMethod(LambdaOrbSeed, "for a transformation semigroup",
388
+ [IsTransformationSemigroup], S -> [0]);
389
+
390
+ InstallMethod(LambdaOrbSeed, "for a partial perm semigroup",
391
+ [IsPartialPermSemigroup], S -> [0]);
392
+
393
+ InstallMethod(LambdaOrbSeed, "for a bipartition semigroup",
394
+ [IsBipartitionSemigroup],
395
+ S -> BLOCKS_NC([[1 .. DegreeOfBipartitionSemigroup(S) + 1]]));
396
+
397
+ InstallMethod(LambdaOrbSeed, "for a Rees 0-matrix subsemigroup",
398
+ [IsReesZeroMatrixSubsemigroup], S -> -1);
399
+
400
+ InstallMethod(LambdaOrbSeed, "for a McAlister triple subsemigroup",
401
+ [IsMcAlisterTripleSubsemigroup], S -> 0);
402
+
403
+ InstallMethod(LambdaOrbSeed,
404
+ "for a matrix over finite field semigroup",
405
+ [IsMatrixOverFiniteFieldSemigroup],
406
+ function(S)
407
+ local deg;
408
+ deg := NrRows(Representative(S)) + 2;
409
+ return NewRowBasisOverFiniteField(IsPlistRowBasisOverFiniteFieldRep,
410
+ BaseDomain(S),
411
+ NullMat(deg, deg, BaseDomain(S)));
412
+ end);
413
+
414
+ # the seed or dummy start point for RhoOrb
415
+
416
+ InstallMethod(RhoOrbSeed, "for a transformation semigroup",
417
+ [IsTransformationSemigroup], S -> [0]);
418
+
419
+ InstallMethod(RhoOrbSeed, "for a partial perm semigroup",
420
+ [IsPartialPermSemigroup], S -> [0]);
421
+
422
+ InstallMethod(RhoOrbSeed, "for a bipartition semigroup",
423
+ [IsBipartitionSemigroup],
424
+ S -> BLOCKS_NC([[1 .. DegreeOfBipartitionSemigroup(S) + 1]]));
425
+
426
+ InstallMethod(RhoOrbSeed, "for a Rees 0-matrix subsemigroup",
427
+ [IsReesZeroMatrixSubsemigroup], S -> -1);
428
+
429
+ InstallMethod(RhoOrbSeed, "for a McAlister triple subsemigroup",
430
+ [IsMcAlisterTripleSubsemigroup], S -> 0);
431
+
432
+ InstallMethod(RhoOrbSeed, "for a matrix semigroup",
433
+ [IsMatrixOverFiniteFieldSemigroup], LambdaOrbSeed);
434
+
435
+ # the function calculating the lambda or rho value of an element
436
+
437
+ InstallMethod(LambdaFunc, "for a transformation semigroup",
438
+ [IsTransformationSemigroup],
439
+ S -> f -> IMAGE_SET_TRANS_INT(f, DegreeOfTransformationSemigroup(S)));
440
+
441
+ InstallMethod(LambdaFunc, "for a partial perm semigroup",
442
+ [IsPartialPermSemigroup], x -> IMAGE_SET_PPERM);
443
+
444
+ InstallMethod(LambdaFunc, "for a bipartition semigroup",
445
+ [IsBipartitionSemigroup], x -> BIPART_RIGHT_BLOCKS);
446
+
447
+ InstallMethod(LambdaFunc, "for a Rees 0-matrix subsemigroup",
448
+ [IsReesZeroMatrixSubsemigroup], R -> function(x)
449
+ if x![1] <> 0 then
450
+ return x![3];
451
+ fi;
452
+ return 0;
453
+ end);
454
+
455
+ InstallMethod(LambdaFunc, "for a McAlister triple subsemigroup",
456
+ [IsMcAlisterTripleSubsemigroup],
457
+ function(S)
458
+ local act;
459
+ act := McAlisterTripleSemigroupAction(MTSEParent(Representative(S)));
460
+ return x -> act(x[1], x[2] ^ -1);
461
+ end);
462
+
463
+ # a function that returns the row space
464
+ InstallMethod(LambdaFunc, "for a matrix semigroup",
465
+ [IsMatrixOverFiniteFieldSemigroup], S -> RowSpaceBasis);
466
+
467
+ InstallMethod(RhoFunc, "for a transformation semigroup",
468
+ [IsTransformationSemigroup],
469
+ S -> f -> FLAT_KERNEL_TRANS_INT(f, DegreeOfTransformationSemigroup(S)));
470
+
471
+ InstallMethod(RhoFunc, "for a partial perm semigroup",
472
+ [IsPartialPermSemigroup], x -> DOMAIN_PPERM);
473
+
474
+ InstallMethod(RhoFunc, "for a bipartition semigroup",
475
+ [IsBipartitionSemigroup], x -> BIPART_LEFT_BLOCKS);
476
+
477
+ InstallMethod(RhoFunc, "for a Rees 0-matrix subsemigroup",
478
+ [IsReesZeroMatrixSubsemigroup], R -> x -> x![1]);
479
+
480
+ InstallMethod(RhoFunc, "for a McAlister triple subsemigroup",
481
+ [IsMcAlisterTripleSubsemigroup], S -> x -> x[1]);
482
+
483
+ # a function that returns the column space
484
+ InstallMethod(RhoFunc, "for a matrix semigroup",
485
+ [IsMatrixOverFiniteFieldSemigroup],
486
+ S -> mat -> LambdaFunc(S)(TransposedMat(mat)));
487
+
488
+ # The function used to calculate the rank of lambda or rho value
489
+
490
+ InstallMethod(LambdaRank, "for a transformation semigroup",
491
+ [IsTransformationSemigroup], x -> Length);
492
+
493
+ InstallMethod(LambdaRank, "for a partial perm semigroup",
494
+ [IsPartialPermSemigroup], x -> Length);
495
+
496
+ InstallMethod(LambdaRank, "for a bipartition semigroup",
497
+ [IsBipartitionSemigroup], x -> BLOCKS_RANK);
498
+
499
+ InstallMethod(LambdaRank, "for a Rees 0-matrix subsemigroup",
500
+ [IsReesZeroMatrixSubsemigroup], R ->
501
+ function(x)
502
+ local parent;
503
+ if x = 0 then
504
+ return 0;
505
+ else
506
+ parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
507
+ return NrMovedPoints(UnderlyingSemigroup(parent)) + 1;
508
+ fi;
509
+ end);
510
+
511
+ InstallMethod(LambdaRank, "for a McAlister subsemigroup",
512
+ [IsMcAlisterTripleSubsemigroup], S ->
513
+ function(x)
514
+ local T;
515
+ if x = 0 then
516
+ return 0;
517
+ fi;
518
+ T := MTSEParent(Representative(S));
519
+ return ActionRank(MTSE(T, x, One(McAlisterTripleSemigroupGroup(T))), 0);
520
+ end);
521
+
522
+ # Why are there row spaces and matrices passed in here?
523
+ InstallMethod(LambdaRank, "for a matrix semigroup",
524
+ [IsMatrixOverFiniteFieldSemigroup], x -> Rank);
525
+
526
+ InstallMethod(RhoRank, "for a transformation semigroup",
527
+ [IsTransformationSemigroup], S -> function(x)
528
+ if IsEmpty(x) then
529
+ return 0;
530
+ else
531
+ return MaximumList(x);
532
+ fi;
533
+ end);
534
+
535
+ InstallMethod(RhoRank, "for a partial perm semigroup",
536
+ [IsPartialPermSemigroup], x -> Length);
537
+
538
+ InstallMethod(RhoRank, "for a bipartition semigroup",
539
+ [IsBipartitionSemigroup], x -> BLOCKS_RANK);
540
+
541
+ InstallMethod(RhoRank, "for a Rees 0-matrix subsemigroup",
542
+ [IsReesZeroMatrixSubsemigroup], LambdaRank);
543
+
544
+ InstallMethod(RhoRank, "for a matrix semigroup",
545
+ [IsMatrixOverFiniteFieldSemigroup], LambdaRank);
546
+
547
+ InstallMethod(RhoRank, "for a McAlister subsemigroup",
548
+ [IsMcAlisterTripleSubsemigroup], LambdaRank);
549
+
550
+ # if g=LambdaInverse(X, f) and X^f=Y, then Y^g=X and g acts on the right
551
+ # like the inverse of f on Y.
552
+
553
+ InstallMethod(LambdaInverse, "for a transformation semigroup",
554
+ [IsTransformationSemigroup], S -> INV_LIST_TRANS);
555
+
556
+ InstallMethod(LambdaInverse, "for a partial perm semigroup",
557
+ [IsPartialPermSemigroup], S -> {x, f} -> f ^ -1);
558
+
559
+ InstallMethod(LambdaInverse, "for a McAlister triple subsemigroup",
560
+ [IsMcAlisterTripleSubsemigroup], S -> {x, f} -> f ^ -1);
561
+
562
+ InstallMethod(LambdaInverse, "for a bipartition semigroup",
563
+ [IsBipartitionSemigroup], S -> BLOCKS_INV_RIGHT);
564
+
565
+ InstallMethod(LambdaInverse, "for a Rees 0-matrix subsemigroup",
566
+ [IsReesZeroMatrixSubsemigroup], S ->
567
+ function(k, x)
568
+ local i;
569
+ if x![1] = 0 or k = 0 then
570
+ return x;
571
+ fi;
572
+ i := First([1 .. Length(x![4][x![3]])], i -> x![4][x![3]][i] <> 0);
573
+ return Objectify(FamilyObj(x)!.type,
574
+ [i,
575
+ (x![4][k][x![1]] * x![2] * x![4][x![3]][i]) ^ -1,
576
+ k,
577
+ x![4]]);
578
+ end);
579
+
580
+ # if g = RhoInverse(X, f) and f ^ X = Y (this is a left action), then
581
+ # g ^ Y = X and g acts on the left like the inverse of f on Y.
582
+
583
+ InstallMethod(LambdaInverse, "for a matrix semigroup",
584
+ [IsMatrixOverFiniteFieldSemigroup], S ->
585
+ {rsp, mat} -> MatrixOverFiniteFieldLocalRightInverse(S, rsp, mat));
586
+
587
+ InstallMethod(RhoInverse, "for a transformation semigroup",
588
+ [IsTransformationSemigroup], S -> INV_KER_TRANS);
589
+
590
+ InstallMethod(RhoInverse, "for a partial perm semigroup",
591
+ [IsPartialPermSemigroup], S ->
592
+ {dom, f} -> f ^ -1);
593
+
594
+ InstallMethod(RhoInverse, "for a McAlister triple subsemigroup",
595
+ [IsMcAlisterTripleSubsemigroup], S -> {x, f} -> f ^ -1);
596
+
597
+ # JDM better method for this!!
598
+
599
+ InstallMethod(RhoInverse, "for a Rees 0-matrix subsemigroup",
600
+ [IsReesZeroMatrixSubsemigroup], S ->
601
+ function(k, x)
602
+ local i;
603
+ if x![1] = 0 or k = 0 then
604
+ return x;
605
+ fi;
606
+ i := First([1 .. Length(x![4])], i -> x![4][i][x![1]] <> 0);
607
+ return Objectify(FamilyObj(x)!.type,
608
+ [k,
609
+ (x![4][i][x![1]] * x![2] * x![4][x![3]][k]) ^ -1,
610
+ i,
611
+ x![4]]);
612
+ end);
613
+
614
+ InstallMethod(RhoInverse, "for a bipartition semigroup",
615
+ [IsBipartitionSemigroup], S -> BLOCKS_INV_LEFT);
616
+
617
+ InstallMethod(RhoInverse, "for a matrix semigroup",
618
+ [IsMatrixOverFiniteFieldSemigroup], S ->
619
+ function(rsp, mat)
620
+ return TransposedMat(MatrixOverFiniteFieldLocalRightInverse(S,
621
+ rsp, TransposedMat(mat)));
622
+ end);
623
+
624
+ SEMIGROUPS.DefaultLambdaBound := _ ->
625
+ function(r)
626
+ if r < 100 then
627
+ return Factorial(r);
628
+ else
629
+ return infinity;
630
+ fi;
631
+ end;
632
+
633
+ InstallMethod(LambdaBound, "for a transformation semigroup",
634
+ [IsTransformationSemigroup], SEMIGROUPS.DefaultLambdaBound);
635
+
636
+ InstallMethod(RhoBound, "for a transformation semigroup",
637
+ [IsTransformationSemigroup], LambdaBound);
638
+
639
+ InstallMethod(LambdaBound, "for a partial perm semigroup",
640
+ [IsPartialPermSemigroup], SEMIGROUPS.DefaultLambdaBound);
641
+
642
+ InstallMethod(RhoBound, "for a partial perm semigroup",
643
+ [IsPartialPermSemigroup], LambdaBound);
644
+
645
+ InstallMethod(LambdaBound, "for a bipartition semigroup",
646
+ [IsBipartitionSemigroup], SEMIGROUPS.DefaultLambdaBound);
647
+
648
+ InstallMethod(RhoBound, "for a bipartition semigroup",
649
+ [IsBipartitionSemigroup], LambdaBound);
650
+
651
+ InstallMethod(LambdaBound, "for a Rees 0-matrix semigroup",
652
+ [IsReesZeroMatrixSubsemigroup], SEMIGROUPS.DefaultLambdaBound);
653
+
654
+ InstallMethod(RhoBound, "for a Rees 0-matrix semigroup",
655
+ [IsReesZeroMatrixSubsemigroup], LambdaBound);
656
+
657
+ InstallMethod(LambdaBound, "for a McAlister subsemigroup",
658
+ [IsMcAlisterTripleSubsemigroup], S ->
659
+ function(r)
660
+ local G;
661
+ G := McAlisterTripleSemigroupGroup(MTSEParent(Representative(S)));
662
+ return Size(Stabilizer(G, r, McAlisterTripleSemigroupAction(S)));
663
+ end);
664
+
665
+ InstallMethod(RhoBound, "for a McAlister subsemigroup",
666
+ [IsMcAlisterTripleSubsemigroup], LambdaBound);
667
+
668
+ InstallMethod(LambdaBound, "for a matrix semigroup",
669
+ [IsMatrixOverFiniteFieldSemigroup], S ->
670
+ function(r)
671
+ if r = 0 then
672
+ return 1;
673
+ elif r < 100 then
674
+ return Size(GL(NrRows(Representative(S)), BaseDomain(S)));
675
+ else
676
+ return infinity;
677
+ fi;
678
+ end);
679
+
680
+ InstallMethod(RhoBound, "for a matrix semigroup",
681
+ [IsMatrixOverFiniteFieldSemigroup], LambdaBound);
682
+
683
+ # LamdaIdentity(S) returns a function that returns
684
+ # the identity element of the Schutzenberger group
685
+ # elements produced by LambdaPerm
686
+
687
+ # TODO(later) these functions don't need the argument <r> any more
688
+
689
+ InstallMethod(LambdaIdentity, "for a transformation semigroup",
690
+ [IsTransformationSemigroup],
691
+ S -> r -> ());
692
+
693
+ InstallMethod(RhoIdentity, "for a transformation semigroup",
694
+ [IsTransformationSemigroup],
695
+ S -> r -> ());
696
+
697
+ InstallMethod(LambdaIdentity, "for a partial perm semigroup",
698
+ [IsPartialPermSemigroup],
699
+ S -> r -> ());
700
+
701
+ InstallMethod(RhoIdentity, "for a partial perm semigroup",
702
+ [IsPartialPermSemigroup],
703
+ S -> r -> ());
704
+
705
+ InstallMethod(LambdaIdentity, "for a bipartition semigroup",
706
+ [IsBipartitionSemigroup],
707
+ S -> r -> ());
708
+
709
+ InstallMethod(RhoIdentity, "for a bipartition semigroup",
710
+ [IsBipartitionSemigroup],
711
+ S -> r -> ());
712
+
713
+ InstallMethod(LambdaIdentity, "for a Rees 0-matrix semigroup",
714
+ [IsReesZeroMatrixSubsemigroup],
715
+ S -> r -> ());
716
+
717
+ InstallMethod(RhoIdentity, "for a Rees 0-matrix semigroup",
718
+ [IsReesZeroMatrixSubsemigroup],
719
+ S -> r -> ());
720
+
721
+ InstallMethod(LambdaIdentity, "for a McAlister triple subsemigroup",
722
+ [IsMcAlisterTripleSubsemigroup],
723
+ S -> r -> ());
724
+
725
+ InstallMethod(RhoIdentity, "for a McAlister triple subsemigroup",
726
+ [IsMcAlisterTripleSubsemigroup], LambdaIdentity);
727
+
728
+ InstallMethod(LambdaIdentity, "for a matrix semigroup",
729
+ [IsMatrixOverFiniteFieldSemigroup], S ->
730
+ r -> IdentityMat(r, BaseDomain(Representative(S))));
731
+
732
+ InstallMethod(RhoIdentity, "for a matrix semigroup",
733
+ [IsMatrixOverFiniteFieldSemigroup], S ->
734
+ r -> IdentityMat(r, BaseDomain(Representative(S))));
735
+
736
+ # LambdaPerm(S) returns a permutation from two acting semigroup elements with
737
+ # equal LambdaFunc and RhoFunc. This is required to check if one of the two
738
+ # elements belongs to the schutz gp of a lambda orb.
739
+
740
+ InstallMethod(LambdaPerm, "for a transformation semigroup",
741
+ [IsTransformationSemigroup], S -> PermLeftQuoTransformationNC);
742
+
743
+ InstallMethod(LambdaPerm, "for a partial perm semigroup",
744
+ [IsPartialPermSemigroup], S -> PERM_LEFT_QUO_PPERM_NC);
745
+
746
+ InstallMethod(LambdaPerm, "for a bipartition semigroup",
747
+ [IsBipartitionSemigroup], S -> BIPART_PERM_LEFT_QUO);
748
+
749
+ InstallMethod(LambdaPerm, "for a Rees 0-matrix subsemigroup",
750
+ [IsReesZeroMatrixSubsemigroup], S ->
751
+ function(x, y)
752
+ if x![1] = 0 or y![1] = 0 then
753
+ return ();
754
+ fi;
755
+ return x![2] ^ -1 * y![2];
756
+ end);
757
+
758
+ InstallMethod(LambdaPerm, "for a McAlister triple subsemigroup",
759
+ [IsMcAlisterTripleSubsemigroup],
760
+ S -> {x, y} -> x[2] ^ -1 * y[2]);
761
+
762
+ InstallMethod(LambdaPerm, "for a matrix semigroup",
763
+ [IsMatrixOverFiniteFieldSemigroup], S ->
764
+ {x, y} -> MatrixOverFiniteFieldSchutzGrpElement(S, x, y));
765
+
766
+ # Returns a permutation mapping LambdaFunc(S)(x) to LambdaFunc(S)(y) so that
767
+ # yx ^ -1(i) = p(i) when RhoFunc(S)(x) = RhoFunc(S)(y)!!
768
+
769
+ InstallMethod(LambdaConjugator, "for a transformation semigroup",
770
+ [IsTransformationSemigroup], S -> TRANS_IMG_CONJ);
771
+
772
+ InstallMethod(LambdaConjugator, "for a partial perm semigroup",
773
+ [IsPartialPermSemigroup], S ->
774
+ {x, y} -> MappingPermListList(IMAGE_PPERM(x), IMAGE_PPERM(y)));
775
+
776
+ InstallMethod(LambdaConjugator, "for a bipartition semigroup",
777
+ [IsBipartitionSemigroup], S -> BIPART_LAMBDA_CONJ);
778
+
779
+ InstallMethod(LambdaConjugator, "for a Rees 0-matrix subsemigroup",
780
+ [IsReesZeroMatrixSubsemigroup], S ->
781
+ # FIXME(later) is this right???? This is not right!!
782
+ {x, y} -> ());
783
+
784
+ InstallMethod(LambdaConjugator, "for a McAlister triple subsemigroup",
785
+ [IsMcAlisterTripleSubsemigroup],
786
+ function(S)
787
+ local T, G, act;
788
+ T := MTSEParent(Representative(S));
789
+ G := McAlisterTripleSemigroupGroup(T);
790
+ act := MTSUnderlyingAction(T); # MTSAction is not an action, causes problems
791
+ return {x, y} -> RepresentativeAction(G,
792
+ LambdaFunc(S)(x),
793
+ LambdaFunc(S)(y),
794
+ act);
795
+ end);
796
+
797
+ InstallMethod(LambdaConjugator, "for a matrix semigroup",
798
+ [IsMatrixOverFiniteFieldSemigroup], S ->
799
+ {x, y} -> MatrixOverFiniteFieldLambdaConjugator(S, x, y));
800
+
801
+ # the function used to test if there is an idempotent with the specified
802
+ # lambda and rho values.
803
+
804
+ InstallMethod(IdempotentTester, "for a transformation semigroup",
805
+ [IsTransformationSemigroup], S ->
806
+ function(img, ker)
807
+ if IsEmpty(img) then
808
+ return IsEmpty(ker);
809
+ fi;
810
+ return IsInjectiveListTrans(img, ker) and Length(img) = MaximumList(ker);
811
+ end);
812
+
813
+ InstallMethod(IdempotentTester, "for a partial perm semigroup",
814
+ [IsPartialPermSemigroup], S -> \=);
815
+
816
+ InstallMethod(IdempotentTester, "for a bipartition semigroup",
817
+ [IsBipartitionSemigroup], S -> BLOCKS_E_TESTER);
818
+
819
+ InstallMethod(IdempotentTester, "for a Rees 0-matrix subsemigroup",
820
+ [IsReesZeroMatrixSubsemigroup], R ->
821
+ function(j, i)
822
+ local parent;
823
+ if i = 0 and j = 0 then
824
+ return true;
825
+ fi;
826
+ parent := ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R)));
827
+ return Matrix(parent)[j][i] <> 0;
828
+ end);
829
+
830
+ InstallMethod(IdempotentTester, "for a McAlister triple subsemigroup",
831
+ [IsMcAlisterTripleSubsemigroup], S -> {x, y} -> x = y);
832
+
833
+ InstallMethod(IdempotentTester, "for a matrix semigroup",
834
+ [IsMatrixOverFiniteFieldSemigroup],
835
+ S -> {x, y} -> MatrixOverFiniteFieldIdempotentTester(S, x, y));
836
+
837
+ # the function used to create an idempotent with the specified lambda and rho
838
+ # values.
839
+
840
+ InstallMethod(IdempotentCreator, "for a transformation semigroup",
841
+ [IsTransformationSemigroup], S -> IDEM_IMG_KER_NC);
842
+
843
+ InstallMethod(IdempotentCreator, "for a partial perm semigp",
844
+ [IsPartialPermSemigroup], S -> PartialPermNC);
845
+
846
+ InstallMethod(IdempotentCreator, "for a bipartition semigroup",
847
+ [IsBipartitionSemigroup], S -> BLOCKS_E_CREATOR);
848
+
849
+ InstallMethod(IdempotentCreator, "for a Rees 0-matrix subsemigroup",
850
+ [IsReesZeroMatrixSubsemigroup], R ->
851
+ function(j, i)
852
+ local mat;
853
+ if i = 0 and j = 0 then
854
+ return Objectify(TypeReesMatrixSemigroupElements(R), [0]);
855
+ fi;
856
+ mat := Matrix(ReesMatrixSemigroupOfFamily(ElementsFamily(FamilyObj(R))));
857
+ return Objectify(TypeReesMatrixSemigroupElements(R),
858
+ [i, mat[j][i] ^ -1, j, mat]);
859
+ end);
860
+
861
+ InstallMethod(IdempotentCreator, "for a McAlister triple subsemigroup",
862
+ [IsMcAlisterTripleSubsemigroup], S ->
863
+ function(x, _)
864
+ local T;
865
+ T := MTSEParent(Representative(S));
866
+ return MTSE(T, x, One(McAlisterTripleSemigroupGroup(T)));
867
+ end);
868
+
869
+ InstallMethod(IdempotentCreator, "for a matrix semigroup",
870
+ [IsMatrixOverFiniteFieldSemigroup],
871
+ S -> {x, y} -> MatrixOverFiniteFieldIdempotentCreator(S, x, y));
872
+
873
+ # the action of elements of the stabiliser of a lambda-value on any element of
874
+ # the semigroup with that lambda-value
875
+
876
+ # StabilizerAction will be \* for transformation and partial perm semigroups
877
+ # and something else for semigroups of bipartitions.
878
+
879
+ InstallMethod(StabilizerAction, "for a transformation semigroup",
880
+ [IsTransformationSemigroup], S -> OnRight);
881
+
882
+ InstallMethod(StabilizerAction, "for a partial perm semigroup",
883
+ [IsPartialPermSemigroup], S -> OnRight);
884
+
885
+ InstallMethod(StabilizerAction, "for a bipartition semigroup",
886
+ [IsBipartitionSemigroup], S -> BIPART_STAB_ACTION);
887
+
888
+ InstallMethod(StabilizerAction, "for a Rees 0-matrix subsemigroup",
889
+ [IsReesZeroMatrixSubsemigroup], S ->
890
+ function(x, p)
891
+ if x![1] = 0 then
892
+ return x;
893
+ fi;
894
+ return Objectify(TypeObj(x), [x![1], x![2] * p, x![3], x![4]]);
895
+ end);
896
+
897
+ InstallMethod(StabilizerAction, "for a McAlister triple subsemigroup",
898
+ [IsMcAlisterTripleSubsemigroup], S ->
899
+ function(x, p)
900
+ local T;
901
+ T := MTSEParent(x);
902
+ return MTSE(T, x[1], x[2] * p);
903
+ end);
904
+
905
+ InstallMethod(StabilizerAction, "for a matrix semigroup",
906
+ [IsMatrixOverFiniteFieldSemigroup], S ->
907
+ {x, y} -> MatrixOverFiniteFieldStabilizerAction(S, x, y));
908
+
909
+ # IsActingSemigroupWithFixedDegreeMultiplication should be <true> if and only
910
+ # if it is only possible to multiply elements of the type in the semigroup with
911
+ # equal degrees.
912
+
913
+ InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
914
+ "for a transformation semigroup",
915
+ [IsTransformationSemigroup and IsActingSemigroup], ReturnFalse);
916
+
917
+ InstallTrueMethod(IsActingSemigroupWithFixedDegreeMultiplication,
918
+ IsBipartitionSemigroup and IsActingSemigroup);
919
+
920
+ InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
921
+ "for an acting partial perm semigroup",
922
+ [IsPartialPermSemigroup and IsActingSemigroup], ReturnFalse);
923
+
924
+ # this is not really relevant here.
925
+ InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
926
+ "for an acting Rees 0-matrix subsemigroup",
927
+ [IsReesZeroMatrixSubsemigroup and IsActingSemigroup], ReturnFalse);
928
+
929
+ InstallMethod(IsActingSemigroupWithFixedDegreeMultiplication,
930
+ "for a McAlister triple subsemigroup",
931
+ [IsMcAlisterTripleSubsemigroup and IsActingSemigroup], ReturnFalse);
932
+
933
+ InstallTrueMethod(IsActingSemigroupWithFixedDegreeMultiplication,
934
+ IsMatrixOverFiniteFieldSemigroup);
935
+
936
+ InstallMethod(SchutzGpMembership, "for a transformation semigroup",
937
+ [IsTransformationSemigroup],
938
+ S -> {stab, x} -> SiftedPermutation(stab, x) = ());
939
+
940
+ InstallMethod(SchutzGpMembership, "for a partial perm semigroup",
941
+ [IsPartialPermSemigroup],
942
+ S -> {stab, x} -> SiftedPermutation(stab, x) = ());
943
+
944
+ InstallMethod(SchutzGpMembership, "for a Rees 0-matrix subsemigroup",
945
+ [IsReesZeroMatrixSubsemigroup],
946
+ S -> {stab, x} -> SiftedPermutation(stab, x) = ());
947
+
948
+ InstallMethod(SchutzGpMembership, "for a McAlister triple subsemigroup",
949
+ [IsMcAlisterTripleSubsemigroup],
950
+ S -> {stab, x} -> SiftedPermutation(stab, x) = ());
951
+
952
+ InstallMethod(SchutzGpMembership, "for a bipartition semigroup",
953
+ [IsBipartitionSemigroup],
954
+ S -> {stab, x} -> SiftedPermutation(stab, x) = ());
955
+
956
+ InstallMethod(SchutzGpMembership, "for a matrix semigroup",
957
+ [IsMatrixOverFiniteFieldSemigroup],
958
+ S -> {stab, x} -> x in stab);
959
+
960
+ # One or a fake one for those types of object without one.
961
+
962
+ InstallMethod(FakeOne, "for a transformation collection",
963
+ [IsTransformationCollection], One);
964
+
965
+ InstallMethod(FakeOne, "for a partial perm collection",
966
+ [IsPartialPermCollection], One);
967
+
968
+ InstallMethod(FakeOne, "for a bipartition collection",
969
+ [IsBipartitionCollection], One);
970
+
971
+ InstallMethod(FakeOne, "for a Rees 0-matrix semigroup element collection",
972
+ [IsReesZeroMatrixSemigroupElementCollection], R -> SEMIGROUPS.UniversalFakeOne);
973
+
974
+ InstallMethod(FakeOne, "for a McAlister triple semigroup element collection",
975
+ [IsMcAlisterTripleSemigroupElementCollection],
976
+ S -> SEMIGROUPS.UniversalFakeOne);
977
+
978
+ # Matrix semigroup elements
979
+ InstallMethod(FakeOne, "for an FFE coll coll coll",
980
+ [IsFFECollCollColl],
981
+ function(coll)
982
+ Assert(1, ForAll(coll, IsMatrixObjOverFiniteField));
983
+ Assert(1, ForAll(coll, x -> NrRows(x) = NrRows(Representative(coll))));
984
+ return One(Representative(coll));
985
+ end);
986
+
987
+ # missing hash functions
988
+
989
+ SEMIGROUPS.HashFunctionRZMSE := function(x, data, func)
990
+ if x![1] = 0 then
991
+ return 1;
992
+ fi;
993
+ # Use some big primes that are near the default hash table size
994
+ if IsNBitsPcWordRep(x![2]) then
995
+ return (104723 * x![1] + 104729 * x![3] + func(x![2], data))
996
+ mod data[2] + 1;
997
+ else
998
+ return (104723 * x![1] + 104729 * x![3] + func(x![2], data)) mod data + 1;
999
+ fi;
1000
+ end;
1001
+
1002
+ InstallMethod(ChooseHashFunction,
1003
+ "for a Rees 0-matrix semigroup element and integer",
1004
+ [IsReesZeroMatrixSemigroupElement, IsInt],
1005
+ function(x, hashlen)
1006
+ local R, data, under, func;
1007
+
1008
+ R := ReesMatrixSemigroupOfFamily(FamilyObj(x));
1009
+ if IsMultiplicativeZero(R, x) then
1010
+ x := EmptyPlist(3);
1011
+ x[2] := Representative(UnderlyingSemigroup(R));
1012
+ fi;
1013
+ if IsNBitsPcWordRep(x![2]) then
1014
+ under := ChooseHashFunction(x![2], hashlen).func;
1015
+ data := ChooseHashFunction(x![2], hashlen).data;
1016
+ else
1017
+ under := ChooseHashFunction(x![2], hashlen).func;
1018
+ data := ChooseHashFunction(x![2], hashlen).data;
1019
+ fi;
1020
+ if data = fail then
1021
+ data := hashlen;
1022
+ fi;
1023
+
1024
+ func := {x, hashlen} -> SEMIGROUPS.HashFunctionRZMSE(x, data, under);
1025
+
1026
+ return rec(func := func, data := data);
1027
+ end);
1028
+
1029
+ # fallback method for hashing
1030
+
1031
+ InstallMethod(ChooseHashFunction, "for an object and an int",
1032
+ [IsObject, IsInt],
1033
+ {p, hashlen} -> rec(func := {v, data} -> 1, data := fail));
1034
+
1035
+ # The next two methods are more general than might seem necessary but
1036
+ # apparently ReesZeroMatrixSemigroup'S satisfying IsWholeFamily are not in
1037
+ # IsActingSemigroup but their ideals are, and we still require a method for
1038
+ # ConvertToInternalElement as a result.
1039
+
1040
+ InstallMethod(ConvertToInternalElement,
1041
+ "for a semigroup and mult. elt.",
1042
+ [IsSemigroup, IsMultiplicativeElement],
1043
+ {S, x} -> x);
1044
+
1045
+ InstallMethod(ConvertToExternalElement,
1046
+ "for a semigroup and mult. elt.",
1047
+ [IsSemigroup, IsMultiplicativeElement],
1048
+ {S, x} -> x);
1049
+
1050
+ InstallMethod(ConvertToInternalElement,
1051
+ "for an acting matrix over ff semigroup and matrix obj",
1052
+ [IsActingSemigroup and IsMatrixOverFiniteFieldSemigroup, IsMatrixObj],
1053
+ function(S, mat)
1054
+ local bd, n;
1055
+
1056
+ Assert(1, IsMatrixObjOverFiniteField(mat));
1057
+ if NrRows(mat) = NrRows(Representative(S)) + 1 then
1058
+ return mat;
1059
+ fi;
1060
+ Assert(1, NrRows(mat) = NrRows(Representative(S)));
1061
+
1062
+ bd := BaseDomain(mat);
1063
+ n := NrRows(mat);
1064
+ mat := List([1 .. n],
1065
+ i -> Concatenation(mat[i], [Zero(bd)]));
1066
+ Add(mat, ZeroMatrix(bd, 1, n + 1)[1]);
1067
+ mat[n + 1, n + 1] := One(bd);
1068
+ return Matrix(bd, mat);
1069
+ end);
1070
+
1071
+ InstallMethod(ConvertToExternalElement,
1072
+ "for an acting matrix over ff semigroup and matrix obj",
1073
+ [IsActingSemigroup and IsMatrixOverFiniteFieldSemigroup, IsMatrixObj],
1074
+ function(S, mat)
1075
+ local n;
1076
+
1077
+ Assert(1, IsMatrixObjOverFiniteField(mat));
1078
+ if NrRows(mat) = NrRows(Representative(S)) then
1079
+ return mat;
1080
+ fi;
1081
+ Assert(1, NrRows(mat) = NrRows(Representative(S)) + 1);
1082
+
1083
+ n := NrRows(mat) - 1;
1084
+ return Matrix(Unpack(mat){[1 .. n]}{[1 .. n]}, mat);
1085
+ end);
1086
+
1087
+ InstallMethod(WeakInverse, "for a transformation",
1088
+ [IsTransformation], InverseOfTransformation);
1089
+
1090
+ InstallMethod(WeakInverse, "for a partial perm",
1091
+ [IsPartialPerm], InverseMutable);
1092
+
1093
+ InstallMethod(WeakInverse, "for a bipartition",
1094
+ [IsBipartition], Star);