passagemath-gap-pkg-semigroups 10.6.30__cp311-cp311-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-311-darwin.so +0 -0
@@ -0,0 +1,1078 @@
1
+ #############################################################################
2
+ ##
3
+ # W rms-translat.gi
4
+ # Y Copyright (C) 2016-22 Finn Smith
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+ #############################################################################
11
+ ## This file contains special methods for translation semigroups and
12
+ ## translational hulls of completely simple and 0-simple semigroups.
13
+ ##
14
+ ## These methods are based on the constructions given in
15
+ ## Petrich, M. (1968)
16
+ ## 'The translational hull of a completely 0-simple semigroup',
17
+ ## Glasgow Mathematical Journal, 9(01), p. 1.
18
+ ## doi: 10.1017/s0017089500000239
19
+ ##
20
+ ## A.H Clifford, Mario Petrich, (1977)
21
+ ## 'Some classes of completely regular semigroups',
22
+ ## Journal of Algebra, Volume 46, Issue 2, 1977, Pages 462-480,
23
+ ## http://dx.doi.org/10.1016/0021-8693(77)90383-0.
24
+ #############################################################################
25
+
26
+ # TODO(later): compute translations of zero-simple semigroups using this
27
+
28
+ # TODO(later): swap Rows/Columns if one is smaller
29
+
30
+ #############################################################################
31
+ # 1. Internal Functions
32
+ #############################################################################
33
+
34
+ # Converts a pair of lists to a left translation without validation
35
+ SEMIGROUPS.RZMSTupleToLeftTranslation := function(S, idx_list, gp_list)
36
+ local zero, L, foo;
37
+
38
+ zero := MultiplicativeZero(S);
39
+ L := LeftTranslations(S);
40
+
41
+ foo := function(x)
42
+ if x = zero then
43
+ return zero;
44
+ elif idx_list[x[1]] <> 0 then
45
+ return RMSElement(S,
46
+ idx_list[x[1]],
47
+ gp_list[x[1]] * x[2],
48
+ x[3]);
49
+ fi;
50
+ return zero;
51
+ end;
52
+ return LeftTranslationNC(L, MappingByFunction(S, S, foo));
53
+ end;
54
+
55
+ # Converts a pair of lists to a right translation without validation
56
+ SEMIGROUPS.RZMSTupleToRightTranslation := function(S, idx_list, gp_list)
57
+ local zero, R, foo;
58
+
59
+ zero := MultiplicativeZero(S);
60
+ R := RightTranslations(S);
61
+
62
+ foo := function(x)
63
+ if x = zero then
64
+ return zero;
65
+ elif idx_list[x[3]] <> 0 then
66
+ return RMSElement(S,
67
+ x[1],
68
+ x[2] * gp_list[x[3]],
69
+ idx_list[x[3]]);
70
+ else
71
+ return zero;
72
+ fi;
73
+ end;
74
+ return RightTranslationNC(R, MappingByFunction(S, S, foo));
75
+ end;
76
+
77
+ # Converts a pair of pairs of lists to a bitranslation without validation
78
+ SEMIGROUPS.RZMSTupleToBitranslation := function(H, x)
79
+ local S, l, r;
80
+
81
+ S := UnderlyingSemigroup(H);
82
+ l := SEMIGROUPS.RZMSTupleToLeftTranslation(S, x[1][1], x[1][2]);
83
+ r := SEMIGROUPS.RZMSTupleToRightTranslation(S, x[2][1], x[2][2]);
84
+
85
+ return BitranslationNC(H, l, r);
86
+ end;
87
+
88
+ # Converts the transformation underlying a left translation into the arguments
89
+ # required for the LeftTranslationsOfNormalRMS function.
90
+ # Arguments are:
91
+ # 1. L, a left translations semigroup over a normalised RMS over a group,
92
+ # 2. - a dense list of length the underlying reps of left translations on S OR
93
+ # - a mapping on S
94
+ # in either case, the second argument must define a left translation on S.
95
+ SEMIGROUPS.LeftTransToNormalRMSTupleNC := function(L, x)
96
+ local S, I, G, one, group_func, trans, t, s, i;
97
+
98
+ S := UnderlyingSemigroup(L);
99
+ I := Rows(S);
100
+ G := UnderlyingSemigroup(S);
101
+ one := One(G);
102
+ group_func := [];
103
+ trans := [];
104
+
105
+ if IsDenseList(x) and
106
+ Length(x) = Length(UnderlyingRepresentatives(LeftTranslations(S))) then
107
+ for i in I do
108
+ # This relies on UnderlyingRepresentatives not being interfered with
109
+ t := AsListCanonical(S)[x[i]];
110
+ trans[i] := t![1];
111
+ group_func[i] := t![2];
112
+ od;
113
+ elif IsGeneralMapping(x) and Source(x) = Range(x) and Source(x) = S then
114
+ for i in I do
115
+ s := RMSElement(S, i, one, 1);
116
+ t := s ^ x;
117
+ trans[i] := t![1];
118
+ group_func[i] := t![2];
119
+ od;
120
+ fi;
121
+ return [group_func, Transformation(trans)];
122
+ end;
123
+
124
+ SEMIGROUPS.RightTransToNormalRMSTupleNC := function(R, x)
125
+ local S, J, G, one, group_func, trans, s, t, j;
126
+
127
+ S := UnderlyingSemigroup(R);
128
+ J := Columns(S);
129
+ G := UnderlyingSemigroup(S);
130
+ one := One(G);
131
+ group_func := [];
132
+ trans := [];
133
+
134
+ if IsDenseList(x) and
135
+ Length(x) = Length(UnderlyingRepresentatives(RightTranslations(S))) then
136
+ for j in J do
137
+ # This relies on UnderlyingRepresentatives not being interfered with
138
+ t := AsListCanonical(S)[x[j]];
139
+ trans[j] := t![3];
140
+ group_func[j] := t![2];
141
+ od;
142
+ elif IsGeneralMapping(x) and Source(x) = Range(x) and Source(x) = S then
143
+ for j in J do
144
+ s := RMSElement(S, 1, one, j);
145
+ t := s ^ x;
146
+ trans[j] := t![3];
147
+ group_func[j] := t![2];
148
+ od;
149
+ fi;
150
+ return [group_func, Transformation(trans)];
151
+ end;
152
+
153
+ # TODO(later): This should go somewhere else
154
+ SEMIGROUPS.IsNormalRMSOverGroup := function(S)
155
+ local mat, T, one;
156
+
157
+ if not IsReesMatrixSemigroup(S) then
158
+ return false;
159
+ fi;
160
+
161
+ T := UnderlyingSemigroup(S);
162
+
163
+ if not IsGroupAsSemigroup(T) then
164
+ return false;
165
+ fi;
166
+
167
+ mat := Matrix(S);
168
+ one := MultiplicativeNeutralElement(T);
169
+ return ForAll(mat[1], x -> x = one) and
170
+ ForAll(mat, x -> x[1] = one);
171
+ end;
172
+
173
+ # Hash translations by their underlying transformations
174
+ SEMIGROUPS.HashFunctionForRMSTranslations :=
175
+ {x, data} -> ORB_HashFunctionForTransformations(x![2], data);
176
+
177
+ # Hash linked pairs as sum of hashes
178
+ SEMIGROUPS.HashFunctionForRMSBitranslations := function(x, data)
179
+ return (SEMIGROUPS.HashFunctionForRMSTranslations(x![1], data)
180
+ + SEMIGROUPS.HashFunctionForRMSTranslations(x![2], data)) mod data + 1;
181
+ end;
182
+
183
+ # Finds the transformations on the indices of a finite 0-simple semigroup
184
+ # which are candidates for translations, when combined with a function from
185
+ # the index sets to the group.
186
+ SEMIGROUPS.RZMSLinkedIndexFuncs := function(S)
187
+ local mat, I, M, Li, bt, tau, sigma, out;
188
+
189
+ mat := MatrixOfReesZeroMatrixSemigroup(S);
190
+ I := [1 .. Length(mat[1])];
191
+ M := [1 .. Length(mat)];
192
+
193
+ Li := List(I, i -> PositionsProperty(mat, row -> row[i] <> 0));
194
+
195
+ bt := function(k)
196
+ local failed, j, mu;
197
+ for j in Union([0], I) do
198
+ tau[k] := j;
199
+ sigma[k + 1] := [];
200
+ failed := false;
201
+ if j <> 0 then
202
+ for mu in Li[j] do
203
+ sigma[k + 1][mu] := Intersection(sigma[k][mu], Li[k]);
204
+ if IsEmpty(sigma[k][mu]) then
205
+ failed := true;
206
+ break;
207
+ fi;
208
+ od;
209
+ if not failed then
210
+ for mu in M do
211
+ if not IsBound(sigma[k + 1][mu]) then
212
+ sigma[k + 1][mu] := Difference(sigma[k][mu], Li[k]);
213
+ fi;
214
+ if Length(sigma[k + 1][mu]) = 0 then
215
+ failed := true;
216
+ break;
217
+ fi;
218
+ od;
219
+ fi;
220
+ else
221
+ for mu in M do
222
+ sigma[k + 1][mu] := Difference(sigma[k][mu], Li[k]);
223
+ if Length(sigma[k + 1][mu]) = 0 then
224
+ failed := true;
225
+ break;
226
+ fi;
227
+ od;
228
+ fi;
229
+ if failed then
230
+ continue;
231
+ fi;
232
+ if k = Length(I) then
233
+ Add(out, [ShallowCopy(tau), IteratorOfCartesianProduct(sigma[k + 1])]);
234
+ else
235
+ bt(k + 1);
236
+ fi;
237
+ od;
238
+ end;
239
+
240
+ tau := [];
241
+ sigma := [List(M, x -> Union([0], M))];
242
+ out := [];
243
+ bt(1);
244
+ return out;
245
+ end;
246
+
247
+ SEMIGROUPS.RZMSLinkingGraph := function(S, tau, sigma)
248
+ local r, mat, D, i, mu;
249
+
250
+ r := Size(Rows(S));
251
+ mat := MatrixOfReesZeroMatrixSemigroup(S);
252
+ D := NullDigraph(IsMutableDigraph, Length(Rows(S)) + Length(Columns(S)));
253
+
254
+ for i in Rows(S) do
255
+ if tau[i] <> 0 then
256
+ for mu in Columns(S) do
257
+ if sigma[mu] <> 0 then
258
+ if mat[mu][tau[i]] <> 0 then
259
+ DigraphAddEdges(D, [[i, mu + r], [mu + r, i]]);
260
+ fi;
261
+ fi;
262
+ od;
263
+ fi;
264
+ od;
265
+
266
+ return D;
267
+ end;
268
+
269
+ SEMIGROUPS.RZMSGroupLinkingConditions := function(S, tau, sigma)
270
+ local D, sccs, reps, r, rep, dive, mat, conditions, row_definitions,
271
+ column_definitions, e, cc;
272
+
273
+ D := SEMIGROUPS.RZMSLinkingGraph(S, tau, sigma);
274
+ sccs := DigraphStronglyConnectedComponents(D);
275
+ reps := [];
276
+
277
+ r := Length(Rows(S));
278
+
279
+ for cc in Filtered(sccs.comps, x -> Size(x) > 1) do
280
+ rep := cc[1];
281
+ if rep > r then
282
+ rep := OutNeighboursOfVertex(D, rep)[1];
283
+ fi;
284
+ Add(reps, rep);
285
+ od;
286
+
287
+ dive := function(v, scc_rep)
288
+ local y, z, defns, x, w;
289
+ if v <= r then
290
+ y := row_definitions[v];
291
+ else
292
+ y := column_definitions[v - r];
293
+ fi;
294
+ for w in OutNeighboursOfVertex(D, v) do
295
+ if w <= r then
296
+ z := w;
297
+ defns := row_definitions;
298
+ x := [mat[v - r][tau[w]] ^ -1 * y[1], y[2] * mat[sigma[v - r]][w]];
299
+ else
300
+ z := w - r;
301
+ defns := column_definitions;
302
+ x := [mat[z][tau[v]] * y[1], y[2] * mat[sigma[z]][v] ^ -1];
303
+ fi;
304
+ if IsBound(defns[z]) then
305
+ Add(conditions[scc_rep], [defns[z], x]);
306
+ else
307
+ defns[z] := x;
308
+ dive(w, scc_rep);
309
+ fi;
310
+ od;
311
+ end;
312
+
313
+ mat := MatrixOfReesZeroMatrixSemigroup(S);
314
+ conditions := List([1 .. r], x -> []);
315
+ row_definitions := [];
316
+ column_definitions := [];
317
+ e := One(UnderlyingSemigroup(S));
318
+
319
+ for rep in reps do
320
+ row_definitions[rep] := [e, e];
321
+ dive(rep, rep);
322
+ od;
323
+
324
+ return rec(reps := reps,
325
+ sccs := sccs,
326
+ conditions := conditions,
327
+ row_definitions := row_definitions,
328
+ column_definitions := column_definitions);
329
+ end;
330
+
331
+ SEMIGROUPS.RZMSLinkedGroupFunctions := function(S, tau, sigma)
332
+ local r, conds, conditions, allowed_vals, reps, vals, keep, sccs, comps,
333
+ ids, row_definitions, column_definitions, out, phi, psi, rep, z, cond, g, tup,
334
+ i, v;
335
+
336
+ r := Length(Rows(S));
337
+
338
+ conds := SEMIGROUPS.RZMSGroupLinkingConditions(S, tau, sigma);
339
+ conditions := conds.conditions;
340
+ allowed_vals := [];
341
+ reps := conds.reps;
342
+ for rep in reps do
343
+ vals := AsList(UnderlyingSemigroup(S));
344
+ for cond in conditions[rep] do
345
+ keep := [];
346
+ for g in vals do
347
+ if cond[1][1] * g * cond[1][2] = cond[2][1] * g * cond[2][2] then
348
+ Add(keep, g);
349
+ fi;
350
+ od;
351
+ vals := keep;
352
+ if IsEmpty(vals) then
353
+ break;
354
+ fi;
355
+ od;
356
+ Add(allowed_vals, vals);
357
+ od;
358
+ if Length(allowed_vals) <> Length(reps) or ForAny(allowed_vals, IsEmpty) then
359
+ return [];
360
+ fi;
361
+
362
+ sccs := conds.sccs;
363
+ comps := sccs.comps;
364
+ ids := sccs.id;
365
+ row_definitions := conds.row_definitions;
366
+ column_definitions := conds.column_definitions;
367
+
368
+ out := [];
369
+ for tup in EnumeratorOfCartesianProduct(allowed_vals) do
370
+ phi := [];
371
+ psi := [];
372
+ for i in [1 .. Size(reps)] do
373
+ rep := reps[i];
374
+ for v in comps[ids[rep]] do
375
+ if v <= r then
376
+ phi[v] := row_definitions[v][1] * tup[i] * row_definitions[v][2];
377
+ else
378
+ z := v - r;
379
+ psi[z] := column_definitions[z][1] *
380
+ tup[i] *
381
+ column_definitions[z][2];
382
+ fi;
383
+ od;
384
+ od;
385
+ Add(out, [phi, psi]);
386
+ od;
387
+ return out;
388
+ end;
389
+
390
+ SEMIGROUPS.BitranslationsRZMS := function(H, opt...)
391
+ local S, out, idx_funcs, nr_only, nr, tau, sigma_it, sigma, gp_funcs,
392
+ empty_bitrans, x, y;
393
+
394
+ S := UnderlyingSemigroup(H);
395
+ out := [];
396
+ idx_funcs := SEMIGROUPS.RZMSLinkedIndexFuncs(S);
397
+ nr_only := opt = ["nr_only"];
398
+ nr := 0;
399
+
400
+ for x in idx_funcs do
401
+ tau := x[1];
402
+ sigma_it := x[2];
403
+ while not IsDoneIterator(sigma_it) do
404
+ sigma := NextIterator(sigma_it);
405
+ gp_funcs := SEMIGROUPS.RZMSLinkedGroupFunctions(S, tau, sigma);
406
+ if nr_only then
407
+ nr := nr + Length(gp_funcs);
408
+ else
409
+ for y in gp_funcs do
410
+ Add(out, [[tau, y[1]], [sigma, y[2]]]);
411
+ od;
412
+ fi;
413
+ od;
414
+ od;
415
+
416
+ if nr_only then
417
+ return nr + 1;
418
+ fi;
419
+
420
+ empty_bitrans := [[List(Rows(S), x -> 0), []],
421
+ [List(Columns(S), x -> 0), []]];
422
+ Add(out, empty_bitrans);
423
+
424
+ Apply(out, x -> SEMIGROUPS.RZMSTupleToBitranslation(H, x));
425
+
426
+ return out;
427
+ end;
428
+
429
+ SEMIGROUPS.NormalRMSInitialisedLinkedFuncs :=
430
+ function(S, G, mat, mat_inv_rows, c, d_inv, x, y)
431
+ local I, M, tau, sigma, g_pos, bt, out, mu;
432
+
433
+ I := Rows(S);
434
+ M := Columns(S);
435
+ tau := [x];
436
+ sigma := List(I, i -> List(M, mu -> ShallowCopy(M)));
437
+ sigma[1][1] := [y];
438
+
439
+ for mu in [2 .. Length(M)] do
440
+ g_pos := PositionCanonical(G, d_inv[mu] * mat[mu][x] * c[1]);
441
+ sigma[1][mu] := mat_inv_rows[1][g_pos];
442
+ if IsEmpty(sigma[1][mu]) then
443
+ return [];
444
+ fi;
445
+ od;
446
+
447
+ bt := function(k)
448
+ local g_pos, consistent, j, mu, tup;
449
+ if k = Length(I) + 1 then
450
+ for tup in EnumeratorOfCartesianProduct(sigma[k - 1]) do
451
+ Add(out, [ShallowCopy(tau), ShallowCopy(tup)]);
452
+ od;
453
+ return;
454
+ fi;
455
+ for j in I do
456
+ consistent := true;
457
+ tau[k] := j;
458
+ for mu in M do
459
+ g_pos := PositionCanonical(G, d_inv[mu] * mat[mu][j] * c[k]);
460
+ sigma[k][mu] := Intersection(sigma[k - 1][mu],
461
+ mat_inv_rows[k][g_pos]);
462
+ if IsEmpty(sigma[k][mu]) then
463
+ consistent := false;
464
+ break;
465
+ fi;
466
+ od;
467
+ if consistent then
468
+ bt(k + 1);
469
+ fi;
470
+ od;
471
+ end;
472
+
473
+ out := [];
474
+ bt(2);
475
+ return out;
476
+ end;
477
+
478
+ SEMIGROUPS.NormalRMSLinkedTriples := function(S, opt...)
479
+ local I, M, iso, inv, G, mat, nr_only, inv_rows, out, b, d_inv, c,
480
+ linked_funcs, i, mu, a, x, y, func_pair;
481
+
482
+ I := Rows(S);
483
+ M := Columns(S);
484
+
485
+ iso := IsomorphismPermGroup(UnderlyingSemigroup(S));
486
+ inv := InverseGeneralMapping(iso);
487
+ G := Semigroup(List(Generators(Range(iso)), AsTransformation));
488
+
489
+ mat := StructuralCopy(MatrixOfReesMatrixSemigroup(S));
490
+ mat := List(mat, row -> List(row, x -> AsTransformation(x ^ iso)));
491
+
492
+ nr_only := opt = ["nr_only"];
493
+
494
+ inv_rows := List(I, x -> List(G, y -> []));
495
+ for i in I do
496
+ for mu in M do
497
+ Add(inv_rows[i][PositionCanonical(G, mat[mu][i])], mu);
498
+ od;
499
+ od;
500
+
501
+ out := [];
502
+ if nr_only then
503
+ out := 0;
504
+ fi;
505
+
506
+ for a in G do
507
+ b := AsPermutation(a) ^ inv;
508
+ for x in I do
509
+ d_inv := List(M, mu -> (mat[mu][x] * a) ^ -1);
510
+ for y in M do
511
+ c := List(I, i -> a * mat[y][i]);
512
+ linked_funcs := SEMIGROUPS.NormalRMSInitialisedLinkedFuncs(S,
513
+ G,
514
+ mat,
515
+ inv_rows,
516
+ c,
517
+ d_inv,
518
+ x,
519
+ y);
520
+ if nr_only then
521
+ out := out + Length(linked_funcs);
522
+ else
523
+ for func_pair in linked_funcs do
524
+ Add(out, Concatenation([b], func_pair));
525
+ od;
526
+ fi;
527
+ od;
528
+ od;
529
+ od;
530
+ return out;
531
+ end;
532
+
533
+ SEMIGROUPS.BitranslationsNormalRMS := function(H, opt...)
534
+ local S, out, nr_only, triple;
535
+
536
+ S := UnderlyingSemigroup(H);
537
+
538
+ H := TranslationalHull(S);
539
+ out := [];
540
+ nr_only := opt = ["nr_only"];
541
+
542
+ if nr_only then
543
+ return SEMIGROUPS.NormalRMSLinkedTriples(S, opt[1]);
544
+ fi;
545
+
546
+ for triple in SEMIGROUPS.NormalRMSLinkedTriples(S) do
547
+ triple := Concatenation([triple[1]],
548
+ List(triple{[2, 3]}, Transformation));
549
+ Add(out, _BitranslationOfNormalRMSByTripleNC(H, triple));
550
+ od;
551
+ return out;
552
+ end;
553
+
554
+ SEMIGROUPS.FamOfRMSLeftTranslationsByTriple := function()
555
+ local fam, type;
556
+
557
+ fam := NewFamily("LeftTranslationsSemigroupElementsFamily",
558
+ _IsLeftTranslationOfNormalRMS);
559
+ type := NewType(fam, _IsLeftTranslationOfNormalRMS);
560
+ fam!.type := type;
561
+ return fam;
562
+ end;
563
+
564
+ SEMIGROUPS.FamOfRMSRightTranslationsByTriple := function()
565
+ local fam, type;
566
+
567
+ fam := NewFamily("RightTranslationsSemigroupElementsFamily",
568
+ _IsRightTranslationOfNormalRMS);
569
+ type := NewType(fam, _IsRightTranslationOfNormalRMS);
570
+ fam!.type := type;
571
+ return fam;
572
+ end;
573
+
574
+ SEMIGROUPS.FamOfRMSBitranslationsByTriple := function()
575
+ local fam, type;
576
+
577
+ fam := NewFamily("BitranslationsSemigroupElementsFamily",
578
+ _IsBitranslationOfNormalRMS);
579
+ type := NewType(fam, _IsBitranslationOfNormalRMS);
580
+ fam!.type := type;
581
+ return fam;
582
+ end;
583
+
584
+ #############################################################################
585
+ # 2. Methods for (zero) simple semigroups
586
+ #############################################################################
587
+
588
+ # The generators are generators of a partial transformation monoid to act on the
589
+ # index sets, together with functions to the generators of the group.
590
+ InstallMethod(GeneratorsOfSemigroup,
591
+ "for the semigroup of left/right translations of a finite 0-simple semigroup",
592
+ [IsTranslationsSemigroup and IsWholeFamily],
593
+ function(T)
594
+ local S, iso, inv, rms, zero, left_trans, n, gens, G, group_gens, f, fa, t, a;
595
+
596
+ S := UnderlyingSemigroup(T);
597
+ if not (IsZeroSimpleSemigroup(S) and IsFinite(S)) then
598
+ TryNextMethod();
599
+ fi;
600
+
601
+ iso := IsomorphismReesZeroMatrixSemigroup(S);
602
+ inv := InverseGeneralMapping(iso);
603
+ rms := Range(iso);
604
+ zero := MultiplicativeZero(rms);
605
+ left_trans := IsLeftTranslationsSemigroup(T);
606
+
607
+ if left_trans then
608
+ n := Length(Rows(rms));
609
+ else
610
+ n := Length(Columns(rms));
611
+ fi;
612
+
613
+ gens := [];
614
+ G := UnderlyingSemigroup(rms);
615
+ group_gens := GeneratorsOfGroup(G);
616
+
617
+ for t in GeneratorsOfSemigroup(PartialTransformationMonoid(n)) do
618
+ if left_trans then
619
+ f := function(x)
620
+ if (x = zero or x[1] ^ t = n + 1) then
621
+ return zero;
622
+ fi;
623
+ return ReesMatrixSemigroupElement(rms, x[1] ^ t,
624
+ x[2], x[3]);
625
+ end;
626
+ Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
627
+ MappingByFunction(rms, rms, f),
628
+ iso)));
629
+ else
630
+ f := function(x)
631
+ if (x = zero or x[3] ^ t = n + 1) then
632
+ return zero;
633
+ fi;
634
+ return ReesMatrixSemigroupElement(rms, x[1],
635
+ x[2], x[3] ^ t);
636
+ end;
637
+ Add(gens, RightTranslationNC(T, CompositionMapping(inv,
638
+ MappingByFunction(rms, rms, f),
639
+ iso)));
640
+ fi;
641
+ od;
642
+
643
+ for a in group_gens do
644
+ fa := function(x)
645
+ if x = 1 then
646
+ return a;
647
+ fi;
648
+ return MultiplicativeNeutralElement(G);
649
+ end;
650
+ if left_trans then
651
+ f := function(x)
652
+ if x = zero then
653
+ return zero;
654
+ fi;
655
+ return ReesMatrixSemigroupElement(rms, x[1],
656
+ fa(x[1]) * x[2], x[3]);
657
+ end;
658
+ Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
659
+ MappingByFunction(rms, rms, f),
660
+ iso)));
661
+ else
662
+ f := function(x)
663
+ if x = zero then
664
+ return zero;
665
+ fi;
666
+ return ReesMatrixSemigroupElement(rms, x[1],
667
+ x[2] * fa(x[3]), x[3]);
668
+ end;
669
+ Add(gens, RightTranslationNC(T, CompositionMapping(
670
+ inv, MappingByFunction(rms, rms, f), iso)));
671
+ fi;
672
+ od;
673
+ return gens;
674
+ end);
675
+
676
+ # The generators are generators of a full transformation monoid to act on the
677
+ # index sets, together with functions to the generators of the group.
678
+ InstallMethod(GeneratorsOfSemigroup,
679
+ "for the semigroup of left/right translations of a finite simple semigroup",
680
+ [IsTranslationsSemigroup and IsWholeFamily],
681
+ function(T)
682
+ local S, iso, inv, rms, L, n, gens, G, group_gens, IsNRMS, idgroup_func, f,
683
+ fa, t, a;
684
+
685
+ S := UnderlyingSemigroup(T);
686
+ if not (IsSimpleSemigroup(S) and IsFinite(S)) then
687
+ TryNextMethod();
688
+ fi;
689
+
690
+ iso := IsomorphismReesMatrixSemigroup(S);
691
+ inv := InverseGeneralMapping(iso);
692
+ rms := Range(iso);
693
+ L := IsLeftTranslationsSemigroup(T);
694
+
695
+ if L then
696
+ n := Length(Rows(rms));
697
+ else
698
+ n := Length(Columns(rms));
699
+ fi;
700
+ gens := [];
701
+ G := UnderlyingSemigroup(rms);
702
+ group_gens := GeneratorsOfGroup(G);
703
+
704
+ IsNRMS := SEMIGROUPS.IsNormalRMSOverGroup(S);
705
+ if IsNRMS then
706
+ idgroup_func := List([1 .. n], i -> MultiplicativeNeutralElement(G));
707
+ fi;
708
+
709
+ for t in GeneratorsOfSemigroup(FullTransformationMonoid(n)) do
710
+ if L then
711
+ if IsNRMS then
712
+ Add(gens, LeftTranslationNC(T, idgroup_func, t));
713
+ else
714
+ f := function(x)
715
+ return ReesMatrixSemigroupElement(rms, x[1] ^ t,
716
+ x[2], x[3]);
717
+ end;
718
+ Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
719
+ MappingByFunction(rms, rms, f),
720
+ iso)));
721
+ fi;
722
+ else
723
+ if IsNRMS then
724
+ Add(gens, RightTranslationNC(T, idgroup_func, t));
725
+ else
726
+ f := function(x)
727
+ return ReesMatrixSemigroupElement(rms, x[1],
728
+ x[2], x[3] ^ t);
729
+ end;
730
+ Add(gens, RightTranslationNC(T,
731
+ CompositionMapping(inv,
732
+ MappingByFunction(rms, rms, f),
733
+ iso)));
734
+ fi;
735
+ fi;
736
+ od;
737
+
738
+ for a in group_gens do
739
+ fa := function(x) # gaplint: disable=W047
740
+ if x = 1 then
741
+ return a;
742
+ fi;
743
+ return MultiplicativeNeutralElement(G);
744
+ end;
745
+ if L then
746
+ if IsNRMS then
747
+ Add(gens, LeftTranslationNC(T,
748
+ List([1 .. n], fa),
749
+ IdentityTransformation));
750
+ else
751
+ f := function(x)
752
+ return ReesMatrixSemigroupElement(rms, x[1],
753
+ fa(x[1]) * x[2], x[3]);
754
+ end;
755
+ Add(gens, LeftTranslationNC(T, CompositionMapping(inv,
756
+ MappingByFunction(rms, rms, f),
757
+ iso)));
758
+ fi;
759
+ else
760
+ if IsNRMS then
761
+ Add(gens, RightTranslationNC(T,
762
+ List([1 .. n], fa),
763
+ IdentityTransformation));
764
+ else
765
+ f := function(x)
766
+ return ReesMatrixSemigroupElement(rms, x[1],
767
+ x[2] * fa(x[3]), x[3]);
768
+ end;
769
+ Add(gens, RightTranslationNC(T,
770
+ CompositionMapping(inv,
771
+ MappingByFunction(rms, rms, f),
772
+ iso)));
773
+ fi;
774
+ fi;
775
+ od;
776
+ return gens;
777
+ end);
778
+
779
+ InstallMethod(Size,
780
+ "for the semigroup of translations of a completely 0-simple semigroup",
781
+ [IsTranslationsSemigroup and IsWholeFamily],
782
+ 1, # To beat the method for arbitrary underlying semigroups which calls AsList
783
+ function(T)
784
+ local S, G, rms, n;
785
+ S := UnderlyingSemigroup(T);
786
+ if not (IsZeroSimpleSemigroup(S) and IsFinite(S)) then
787
+ TryNextMethod();
788
+ fi;
789
+ rms := Range(IsomorphismReesZeroMatrixSemigroup(S));
790
+ G := UnderlyingSemigroup(rms);
791
+ if IsLeftTranslationsSemigroup(T) then
792
+ n := Length(Rows(rms));
793
+ else
794
+ n := Length(Columns(rms));
795
+ fi;
796
+ return (n * Size(G) + 1) ^ n;
797
+ end);
798
+
799
+ InstallMethod(Size,
800
+ "for the semigroup of translations of a completely simple semigroup",
801
+ [IsTranslationsSemigroup and IsWholeFamily],
802
+ 1, # To beat the method for arbitrary underlying semigroups which calls AsList
803
+ function(T)
804
+ local S, G, rms, n;
805
+ S := UnderlyingSemigroup(T);
806
+ if not (IsSimpleSemigroup(S) and IsFinite(S)) then
807
+ TryNextMethod();
808
+ fi;
809
+ rms := Range(IsomorphismReesMatrixSemigroup(S));
810
+ G := UnderlyingSemigroup(rms);
811
+ if IsLeftTranslationsSemigroup(T) then
812
+ n := Length(Rows(rms));
813
+ else
814
+ n := Length(Columns(rms));
815
+ fi;
816
+ return n ^ n * Size(G) ^ n;
817
+ end);
818
+
819
+ # Create a left translation of an IxJ normalised RMS over a group G.
820
+ # L should be a left translations semigroup
821
+ # group_func should be a function (represented as a list) from I to G
822
+ # t should be a transformation of I
823
+ InstallOtherMethod(LeftTranslation,
824
+ "for a semigroup of left translations, a dense list, and a transformation",
825
+ [_IsLeftTranslationOfNormalRMSSemigroup, IsDenseList, IsTransformation],
826
+ function(L, group_func, t)
827
+ local S, G;
828
+
829
+ S := UnderlyingSemigroup(L);
830
+ G := UnderlyingSemigroup(S);
831
+
832
+ if not (IsList(group_func) and
833
+ ForAll(group_func, x -> x in G) and
834
+ Size(group_func) = Size(Matrix(S)[1])) then
835
+ ErrorNoReturn("the second argument must be a list of group elements ",
836
+ "of length equal to the number of rows of the underlying ",
837
+ "semigroup of the first argument");
838
+ fi;
839
+
840
+ if not (IsTransformation(t) and
841
+ DegreeOfTransformation(t) <= Size(Matrix(S)[1])) then
842
+ ErrorNoReturn("the third argument must be a transformation on ",
843
+ "the number of rows of the underlying semigroup of the ",
844
+ "first argument");
845
+ fi;
846
+
847
+ return LeftTranslationNC(L, group_func, t);
848
+ end);
849
+
850
+ InstallGlobalFunction(_LeftTranslationOfNormalRMSNC,
851
+ function(L, x, opt...)
852
+ local tup, group_func, t;
853
+
854
+ if IsEmpty(opt) then
855
+ tup := SEMIGROUPS.LeftTransToNormalRMSTupleNC(L, x);
856
+ group_func := tup[1];
857
+ t := tup[2];
858
+ else
859
+ group_func := x;
860
+ t := opt[1];
861
+ fi;
862
+
863
+ return Objectify(TypeLeftTranslationsSemigroupElements(L),
864
+ [group_func, t]);
865
+ end);
866
+
867
+ # Create a right translation of an IxJ normalised RMS over a group G.
868
+ # R should be a right translations semigroup
869
+ # group_func should be a function (represented as a list) from J to G
870
+ # t should be a transformation of J
871
+ InstallOtherMethod(RightTranslation,
872
+ "for a semigroup of right translations, a dense list, and a transformation",
873
+ [_IsRightTranslationOfNormalRMSSemigroup, IsDenseList, IsTransformation],
874
+ function(R, group_func, t)
875
+ local S, G;
876
+
877
+ S := UnderlyingSemigroup(R);
878
+ G := UnderlyingSemigroup(S);
879
+
880
+ if not (IsList(group_func) and
881
+ ForAll(group_func, x -> x in G) and
882
+ Size(group_func) = Size(MatrixOfReesMatrixSemigroup(S))) then
883
+ ErrorNoReturn("the second argument must be a list of group elements ",
884
+ "of length equal to the number of rows of the underlying ",
885
+ "semigroup of the first argument");
886
+ elif not (IsTransformation(t) and
887
+ DegreeOfTransformation(t) <= Size(Matrix(S))) then
888
+ ErrorNoReturn("the third argument must be a transformation on ",
889
+ "the number of columns of the underlying semigroup of the ",
890
+ "first argument");
891
+ fi;
892
+
893
+ return _RightTranslationOfNormalRMSNC(R, group_func, t);
894
+ end);
895
+
896
+ InstallGlobalFunction(_RightTranslationOfNormalRMSNC,
897
+ function(R, x, opt...)
898
+ local tup, group_func, t;
899
+
900
+ if IsEmpty(opt) then
901
+ tup := SEMIGROUPS.RightTransToNormalRMSTupleNC(R, x);
902
+ group_func := tup[1];
903
+ t := tup[2];
904
+ else
905
+ group_func := x;
906
+ t := opt[1];
907
+ fi;
908
+
909
+ return Objectify(TypeRightTranslationsSemigroupElements(R),
910
+ [group_func, t]);
911
+ end);
912
+
913
+ InstallOtherMethod(Bitranslation,
914
+ "for a bitranslation defined by a triple on a normal RMS",
915
+ [IsBitranslationsSemigroup, IsAssociativeElement, IsTransformation,
916
+ IsTransformation],
917
+ function(H, g, chi, psi)
918
+ local S, P, I, J, i, mu;
919
+
920
+ S := UnderlyingSemigroup(H);
921
+
922
+ if not SEMIGROUPS.IsNormalRMSOverGroup(S) then
923
+ TryNextMethod();
924
+ fi;
925
+
926
+ P := Matrix(S);
927
+ I := Rows(S);
928
+ J := Columns(S);
929
+
930
+ if not g in UnderlyingSemigroup(S) then
931
+ ErrorNoReturn("the second argument must be an element of the group that ",
932
+ "the underlying semigroup of the first argument is defined ",
933
+ "over");
934
+ elif LargestImageOfMovedPoint(chi) > Length(I) then
935
+ ErrorNoReturn("the third argument must be a transformation on the rows of ",
936
+ "the underlying semigroup of the first argument");
937
+ elif LargestImageOfMovedPoint(psi) > Length(J) then
938
+ ErrorNoReturn("the fourth argument must be a transformation on the rows ",
939
+ "of the underlying semigroup of the first argument");
940
+ fi;
941
+
942
+ for i in I do
943
+ for mu in J do
944
+ if not P[mu][i ^ chi] * g * P[1 ^ psi][i]
945
+ = P[mu][1 ^ chi] * g * P[mu ^ psi][i] then
946
+ ErrorNoReturn("the arguments given do not define a bitranslation");
947
+ fi;
948
+ od;
949
+ od;
950
+
951
+ return _BitranslationOfNormalRMSByTripleNC(H, [g, chi, psi]);
952
+ end);
953
+
954
+ InstallGlobalFunction(_BitranslationOfNormalRMSByTripleNC,
955
+ function(H, triple)
956
+ local S, P, I, M, left_group_func, right_group_func, l, r;
957
+
958
+ S := UnderlyingSemigroup(H);
959
+ P := Matrix(S);
960
+ I := Rows(S);
961
+ M := Columns(S);
962
+
963
+ left_group_func := List(I, i -> triple[1] * P[1 ^ triple[3]][i]);
964
+ right_group_func := List(M, mu -> P[mu][1 ^ triple[2]] * triple[1]);
965
+
966
+ l := LeftTranslationNC(LeftTranslations(S), left_group_func, triple[2]);
967
+ r := RightTranslationNC(RightTranslations(S), right_group_func, triple[3]);
968
+
969
+ return BitranslationNC(H, l, r);
970
+ end);
971
+
972
+ ############################################################################
973
+ # 3. Technical Methods
974
+ ############################################################################
975
+
976
+ InstallMethod(Representative,
977
+ "for a semigroup of left or right translations over a normalised RMS",
978
+ [_IsTranslationOfNormalRMSSemigroup and IsWholeFamily],
979
+ function(T)
980
+ local e, G, S;
981
+
982
+ S := UnderlyingSemigroup(T);
983
+ G := UnderlyingSemigroup(S);
984
+ e := MultiplicativeNeutralElement(G);
985
+
986
+ if _IsLeftTranslationOfNormalRMSSemigroup(T) then
987
+ return LeftTranslationNC(T,
988
+ List(Rows(S), x -> e),
989
+ IdentityTransformation);
990
+ else
991
+ return RightTranslationNC(T,
992
+ List(Columns(S), x -> e),
993
+ IdentityTransformation);
994
+ fi;
995
+ end);
996
+
997
+ InstallMethod(\*, "for left translations of a normalised RMS",
998
+ IsIdenticalObj,
999
+ [_IsLeftTranslationOfNormalRMS, _IsLeftTranslationOfNormalRMS],
1000
+ function(x, y)
1001
+ return Objectify(FamilyObj(x)!.type,
1002
+ [List([1 .. Size(x![1])], i -> x![1][i ^ y![2]] * y![1][i]),
1003
+ y![2] * x![2]]);
1004
+ end);
1005
+
1006
+ InstallMethod(\=, "for left translations of a normalised RMS",
1007
+ IsIdenticalObj,
1008
+ [_IsLeftTranslationOfNormalRMS, _IsLeftTranslationOfNormalRMS],
1009
+ {x, y} -> x![1] = y![1] and x![2] = y![2]);
1010
+
1011
+ InstallMethod(\<, "for left translations of a normalised RMS",
1012
+ IsIdenticalObj,
1013
+ [_IsLeftTranslationOfNormalRMS, _IsLeftTranslationOfNormalRMS],
1014
+ {x, y} -> x![2] < y![2] or (x![2] = y![2] and x![1] < y![1]));
1015
+
1016
+ InstallMethod(\*, "for right translations of a normalised RMS",
1017
+ IsIdenticalObj,
1018
+ [_IsRightTranslationOfNormalRMS, _IsRightTranslationOfNormalRMS],
1019
+ function(x, y)
1020
+ return Objectify(FamilyObj(x)!.type,
1021
+ [List([1 .. Size(x![1])], j -> x![1][j] * y![1][j ^ x![2]]),
1022
+ x![2] * y![2]]);
1023
+ end);
1024
+
1025
+ InstallMethod(\=, "for right translations of a normalised RMS",
1026
+ IsIdenticalObj,
1027
+ [_IsRightTranslationOfNormalRMS, _IsRightTranslationOfNormalRMS],
1028
+ {x, y} -> x![1] = y![1] and x![2] = y![2]);
1029
+
1030
+ InstallMethod(\<, "for right translations of a normalised RMS",
1031
+ IsIdenticalObj,
1032
+ [_IsRightTranslationOfNormalRMS, _IsRightTranslationOfNormalRMS],
1033
+ {x, y} -> x![2] < y![2] or (x![2] = y![2] and x![1] < y![1]));
1034
+
1035
+ InstallMethod(\*, "for bitranslations of a normalised RMS",
1036
+ IsIdenticalObj,
1037
+ [_IsBitranslationOfNormalRMS, _IsBitranslationOfNormalRMS],
1038
+ {x, y} -> Objectify(FamilyObj(x)!.type, [x![1] * y![1], x![2] * y![2]]));
1039
+
1040
+ InstallMethod(\=, "for bitranslations of a normalised RMS",
1041
+ IsIdenticalObj,
1042
+ [_IsBitranslationOfNormalRMS, _IsBitranslationOfNormalRMS],
1043
+ {x, y} -> x![1] = y![1] and x![2] = y![2]);
1044
+
1045
+ InstallMethod(\<, "for bitranslations of a normalised RMS",
1046
+ IsIdenticalObj,
1047
+ [_IsBitranslationOfNormalRMS, _IsBitranslationOfNormalRMS],
1048
+ {x, y} -> x![1] < y![1] or (x![1] = y![1] and x![2] < y![2]));
1049
+
1050
+ InstallMethod(\^, "for a semigroup element and a translation",
1051
+ [IsReesMatrixSemigroupElement, _IsTranslationOfNormalRMS],
1052
+ function(x, t)
1053
+ if _IsLeftTranslationOfNormalRMS(t) then
1054
+ return RMSElementNC(ReesMatrixSemigroupOfFamily(FamilyObj(x)),
1055
+ x![1] ^ t![2],
1056
+ t![1][x![1]] * x![2],
1057
+ x![3]);
1058
+ else
1059
+ return RMSElementNC(ReesMatrixSemigroupOfFamily(FamilyObj(x)),
1060
+ x![1],
1061
+ x![2] * t![1][x![3]],
1062
+ x![3] ^ t![2]);
1063
+ fi;
1064
+ end);
1065
+
1066
+ InstallMethod(ChooseHashFunction, "for a left or right translation and int",
1067
+ [_IsTranslationOfNormalRMS, IsInt],
1068
+ function(_, hashlen)
1069
+ return rec(func := SEMIGROUPS.HashFunctionForRMSTranslations,
1070
+ data := hashlen);
1071
+ end);
1072
+
1073
+ InstallMethod(ChooseHashFunction, "for a bitranslation and int",
1074
+ [_IsBitranslationOfNormalRMS, IsInt],
1075
+ function(_, hashlen)
1076
+ return rec(func := SEMIGROUPS.HashFunctionForRMSBitranslations,
1077
+ data := hashlen);
1078
+ end);