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,741 @@
1
+ #############################################################################
2
+ ##
3
+ ## greens/froidure-pin.gi
4
+ ## Copyright (C) 2015-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ # This file contains methods for Green's relations and classes of semigroups
12
+ # that satisfy IsSemigroup and CanUseFroidurePin.
13
+
14
+ #############################################################################
15
+ ##
16
+ ## Contents:
17
+ ##
18
+ ## 1. Helper functions for the creation of Green's classes, and lambda-rho
19
+ ## stuff.
20
+ ##
21
+ ## 2. Technical Green's stuff (types, representative, etc)
22
+ ##
23
+ ## 3. Green's relations
24
+ ##
25
+ ## 4. Individual Green's classes, and equivalence classes of Green's
26
+ ## relations (constructors, size, membership)
27
+ ##
28
+ ## 5. Collections of Green's classes (GreensXClasses, XClassReps, NrXClasses)
29
+ ##
30
+ ## 6. Idempotents and NrIdempotents
31
+ ##
32
+ ## 7. Mapping etc
33
+ ##
34
+ #############################################################################
35
+
36
+ #############################################################################
37
+ ## The main idea is to store all of the information about all Green's classes
38
+ ## of a particular type in the corresponding Green's relation. An individual
39
+ ## Green's class only stores the index of the equivalence class corresponding
40
+ ## to the Green's class, then looks everything up in the data contained in the
41
+ ## Green's relation. The equivalence class data structures for R-, L-, H-,
42
+ ## D-classes of a semigroup <S> that can compute a Froidure-Pin are stored in
43
+ ## the !.data component of the corresponding Green's relation.
44
+ #############################################################################
45
+
46
+ #############################################################################
47
+ ## 1. Helper functions for the creation of Green's classes/relations . . .
48
+ #############################################################################
49
+
50
+ # There are no methods for EquivalenceClassOfElementNC for Green's classes of
51
+ # semigroups that can compute Froidure-Pin because if we create a Green's class
52
+ # without knowing the Green's relations and the related strongly connected
53
+ # components data, then the Green's class won't have the correct type and won't
54
+ # have access to the correct methods.
55
+
56
+ SEMIGROUPS.EquivalenceClassOfElement := function(rel, rep, type)
57
+ local pos, out, S;
58
+
59
+ pos := PositionCanonical(Source(rel), rep);
60
+ if pos = fail then
61
+ ErrorNoReturn("the 2nd argument (a mult. elt.) does not belong to the ",
62
+ "source of the 1st argument (a Green's relation)");
63
+ fi;
64
+
65
+ out := rec();
66
+ S := Source(rel);
67
+ ObjectifyWithAttributes(out, type(S), EquivalenceClassRelation, rel,
68
+ Representative, rep, ParentAttr, S);
69
+
70
+ out!.index := rel!.data.id[pos];
71
+
72
+ return out;
73
+ end;
74
+
75
+ SEMIGROUPS.GreensXClasses := function(S,
76
+ GreensXRelation,
77
+ GreensXClassOfElement)
78
+ local comps, enum, out, C, i;
79
+
80
+ comps := GreensXRelation(S)!.data.comps;
81
+ enum := EnumeratorCanonical(S);
82
+ out := EmptyPlist(Length(comps));
83
+
84
+ for i in [1 .. Length(comps)] do
85
+ C := GreensXClassOfElement(S, enum[comps[i][1]]);
86
+ C!.index := i;
87
+ out[i] := C;
88
+ od;
89
+ return out;
90
+ end;
91
+
92
+ SEMIGROUPS.XClassReps := function(S, GreensXRelation)
93
+ local comps, enum, out, i;
94
+
95
+ comps := GreensXRelation(S)!.data.comps;
96
+ enum := EnumeratorCanonical(S);
97
+ out := EmptyPlist(Length(comps));
98
+ for i in [1 .. Length(comps)] do
99
+ out[i] := enum[comps[i][1]];
100
+ od;
101
+ return out;
102
+ end;
103
+
104
+ SEMIGROUPS.GreensXClassesOfClass := function(C,
105
+ GreensXRelation,
106
+ GreensXClassOfElement)
107
+ local S, comp, id, seen, enum, out, i;
108
+
109
+ S := Parent(C);
110
+ comp := EquivalenceClassRelation(C)!.data.comps[C!.index];
111
+ id := GreensXRelation(Parent(C))!.data.id;
112
+ seen := BlistList([1 .. Maximum(id)], []);
113
+ enum := EnumeratorCanonical(S);
114
+ out := EmptyPlist(Length(comp));
115
+
116
+ for i in comp do
117
+ if not seen[id[i]] then
118
+ seen[id[i]] := true;
119
+ C := GreensXClassOfElement(S, enum[i]);
120
+ C!.index := id[i];
121
+ Add(out, C);
122
+ fi;
123
+ od;
124
+
125
+ return out;
126
+ end;
127
+
128
+ SEMIGROUPS.XClassRepsOfClass := function(C, GreensXRelation)
129
+ local S, comp, id, seen, enum, out, i;
130
+
131
+ S := Parent(C);
132
+ comp := EquivalenceClassRelation(C)!.data.comps[C!.index];
133
+ id := GreensXRelation(Parent(C))!.data.id;
134
+ seen := BlistList([1 .. Maximum(id)], []);
135
+ enum := EnumeratorCanonical(S);
136
+ out := EmptyPlist(Length(comp));
137
+
138
+ for i in comp do
139
+ if not seen[id[i]] then
140
+ seen[id[i]] := true;
141
+ Add(out, enum[i]);
142
+ fi;
143
+ od;
144
+
145
+ return out;
146
+ end;
147
+
148
+ SEMIGROUPS.XClassIndex := C -> C!.index;
149
+
150
+ #############################################################################
151
+ ## 2. Technical Green's classes stuff . . .
152
+ #############################################################################
153
+
154
+ # This should be removed after the library method for AsSSortedList for a
155
+ # Green's class is removed. The default AsSSortedList for a collection is what
156
+ # should be used (it is identical)!
157
+
158
+ InstallMethod(AsSSortedList, "for a Green's class",
159
+ [IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
160
+ C -> ConstantTimeAccessList(EnumeratorSorted(C)));
161
+
162
+ InstallMethod(Size,
163
+ "for a Green's class of a semigroup that CanUseFroidurePin",
164
+ [IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
165
+ function(C)
166
+ return Length(EquivalenceClassRelation(C)!.
167
+ data.comps[SEMIGROUPS.XClassIndex(C)]);
168
+ end);
169
+
170
+ InstallMethod(\in,
171
+ "for a mult. elt and a Green's class of a semigroup that CanUseFroidurePin",
172
+ [IsMultiplicativeElement,
173
+ IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
174
+ function(x, C)
175
+ local pos;
176
+ pos := PositionCanonical(Parent(C), x);
177
+ return pos <> fail
178
+ and EquivalenceClassRelation(C)!.data.id[pos] = SEMIGROUPS.XClassIndex(C);
179
+ end);
180
+
181
+ InstallMethod(DClassType, "for a semigroup with CanUseFroidurePin",
182
+ [IsSemigroup and CanUseFroidurePin],
183
+ function(S)
184
+ return NewType(FamilyObj(S),
185
+ IsGreensClassOfSemigroupThatCanUseFroidurePinRep
186
+ and IsEquivalenceClassDefaultRep
187
+ and IsGreensDClass);
188
+ end);
189
+
190
+ InstallMethod(HClassType, "for a semigroup with CanUseFroidurePin",
191
+ [IsSemigroup and CanUseFroidurePin],
192
+ function(S)
193
+ return NewType(FamilyObj(S),
194
+ IsGreensClassOfSemigroupThatCanUseFroidurePinRep
195
+ and IsEquivalenceClassDefaultRep
196
+ and IsGreensHClass);
197
+ end);
198
+
199
+ InstallMethod(LClassType, "for a semigroup with CanUseFroidurePin",
200
+ [IsSemigroup and CanUseFroidurePin],
201
+ function(S)
202
+ return NewType(FamilyObj(S),
203
+ IsGreensClassOfSemigroupThatCanUseFroidurePinRep
204
+ and IsEquivalenceClassDefaultRep
205
+ and IsGreensLClass);
206
+ end);
207
+
208
+ InstallMethod(RClassType, "for a semigroup with CanUseFroidurePin",
209
+ [IsSemigroup and CanUseFroidurePin],
210
+ function(S)
211
+ return NewType(FamilyObj(S),
212
+ IsGreensClassOfSemigroupThatCanUseFroidurePinRep
213
+ and IsEquivalenceClassDefaultRep
214
+ and IsGreensRClass);
215
+ end);
216
+
217
+ #############################################################################
218
+ ## 3. Green's relations
219
+ #############################################################################
220
+
221
+ # same method for ideals
222
+
223
+ InstallMethod(GreensRRelation, "for a semigroup with CanUseFroidurePin",
224
+ [IsSemigroup and CanUseFroidurePin],
225
+ function(S)
226
+ local fam, data, filt, rel;
227
+ if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S)) then
228
+ TryNextMethod();
229
+ fi;
230
+ fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
231
+ ElementsFamily(FamilyObj(S)));
232
+ data := DigraphStronglyConnectedComponents(RightCayleyDigraph(S));
233
+ filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
234
+ rel := Objectify(NewType(fam,
235
+ IsEquivalenceRelation
236
+ and IsEquivalenceRelationDefaultRep
237
+ and IsGreensRRelation
238
+ and filt),
239
+ rec(data := data));
240
+ SetSource(rel, S);
241
+ SetRange(rel, S);
242
+ SetIsLeftSemigroupCongruence(rel, true);
243
+
244
+ return rel;
245
+ end);
246
+
247
+ # same method for ideals
248
+
249
+ InstallMethod(GreensLRelation, "for a semigroup with CanUseFroidurePin",
250
+ [IsSemigroup and CanUseFroidurePin],
251
+ function(S)
252
+ local fam, data, filt, rel;
253
+ if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S)) then
254
+ TryNextMethod();
255
+ fi;
256
+ fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
257
+ ElementsFamily(FamilyObj(S)));
258
+ data := DigraphStronglyConnectedComponents(LeftCayleyDigraph(S));
259
+ filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
260
+ rel := Objectify(NewType(fam,
261
+ IsEquivalenceRelation
262
+ and IsEquivalenceRelationDefaultRep
263
+ and IsGreensLRelation
264
+ and filt),
265
+ rec(data := data));
266
+ SetSource(rel, S);
267
+ SetRange(rel, S);
268
+ SetIsRightSemigroupCongruence(rel, true);
269
+
270
+ return rel;
271
+ end);
272
+
273
+ # same method for ideals
274
+
275
+ InstallMethod(GreensDRelation, "for semigroup with CanUseFroidurePin",
276
+ [IsSemigroup and CanUseFroidurePin],
277
+ function(S)
278
+ local fam, data, filt, rel;
279
+ if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S))
280
+ or (IsFreeBandCategory(S) and Size(GeneratorsOfSemigroup(S)) > 4) then
281
+ TryNextMethod();
282
+ fi;
283
+ fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
284
+ ElementsFamily(FamilyObj(S)));
285
+
286
+ data := SCC_UNION_LEFT_RIGHT_CAYLEY_GRAPHS(
287
+ DigraphStronglyConnectedComponents(RightCayleyDigraph(S)),
288
+ DigraphStronglyConnectedComponents(LeftCayleyDigraph(S)));
289
+
290
+ filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
291
+ rel := Objectify(NewType(fam,
292
+ IsEquivalenceRelation
293
+ and IsEquivalenceRelationDefaultRep
294
+ and IsGreensDRelation
295
+ and filt),
296
+ rec(data := data));
297
+ SetSource(rel, S);
298
+ SetRange(rel, S);
299
+
300
+ return rel;
301
+ end);
302
+
303
+ # same method for ideals
304
+
305
+ InstallMethod(GreensHRelation, "for a semigroup with CanUseFroidurePin",
306
+ [IsSemigroup and CanUseFroidurePin],
307
+ function(S)
308
+ local fam, data, filt, rel;
309
+ if IsActingSemigroup(S) or (HasIsFinite(S) and not IsFinite(S)) then
310
+ TryNextMethod();
311
+ fi;
312
+ fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
313
+ ElementsFamily(FamilyObj(S)));
314
+
315
+ data := FIND_HCLASSES(
316
+ DigraphStronglyConnectedComponents(RightCayleyDigraph(S)),
317
+ DigraphStronglyConnectedComponents(LeftCayleyDigraph(S)));
318
+
319
+ filt := IsGreensRelationOfSemigroupThatCanUseFroidurePinRep;
320
+ rel := Objectify(NewType(fam, IsEquivalenceRelation
321
+ and IsEquivalenceRelationDefaultRep
322
+ and IsGreensHRelation
323
+ and filt),
324
+ rec(data := data));
325
+ SetSource(rel, S);
326
+ SetRange(rel, S);
327
+
328
+ return rel;
329
+ end);
330
+
331
+ #############################################################################
332
+ ## 4. Individual classes . . .
333
+ #############################################################################
334
+
335
+ InstallMethod(Enumerator,
336
+ "for a Green's class of a semigroup that CanUseFroidurePin",
337
+ [IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
338
+ function(C)
339
+ local rel, ind;
340
+ rel := EquivalenceClassRelation(C);
341
+ ind := rel!.data.comps[SEMIGROUPS.XClassIndex(C)];
342
+ return EnumeratorCanonical(Range(rel)){ind};
343
+ end);
344
+
345
+ InstallMethod(EquivalenceClassOfElement,
346
+ "for a semigroup with CanUseFroidurePin Green's R-relation + a mult. elt.",
347
+ [IsGreensRRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
348
+ IsMultiplicativeElement],
349
+ {rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, RClassType));
350
+
351
+ InstallMethod(EquivalenceClassOfElement,
352
+ "for a semigroup with CanUseFroidurePin Green's L-relation + a mult. elt.",
353
+ [IsGreensLRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
354
+ IsMultiplicativeElement],
355
+ {rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, LClassType));
356
+
357
+ InstallMethod(EquivalenceClassOfElement,
358
+ "for a semigroup with CanUseFroidurePin Green's H-relation + a mult. elt.",
359
+ [IsGreensHRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
360
+ IsMultiplicativeElement],
361
+ {rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, HClassType));
362
+
363
+ InstallMethod(EquivalenceClassOfElement,
364
+ "for a semigroup with CanUseFroidurePin Green's D-relation + a mult. elt.",
365
+ [IsGreensDRelation and IsGreensRelationOfSemigroupThatCanUseFroidurePinRep,
366
+ IsMultiplicativeElement],
367
+ {rel, rep} -> SEMIGROUPS.EquivalenceClassOfElement(rel, rep, DClassType));
368
+
369
+ # No check Green's classes of an element of a semigroup . . .
370
+
371
+ # The methods for GreensXClassOfElementNC for arbitrary finite semigroup use
372
+ # EquivalenceClassOfElementNC which only have a method in the library, and
373
+ # hence the created classes could not be in
374
+ # IsGreensClassOfSemigroupThatCanUseFroidurePinRep. In any case, calling
375
+ # GreensXRelation(S) (as these methods do) on a semigroup with
376
+ # CanUseFroidurePin completely enumerates it, so the only thing we gain
377
+ # here is one constant time check that the representative actually belongs to
378
+ # the semigroup.
379
+
380
+ InstallMethod(GreensRClassOfElementNC,
381
+ "for a finite semigroup with CanUseFroidurePin and multiplicative element",
382
+ [IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
383
+ GreensRClassOfElement);
384
+
385
+ InstallMethod(GreensLClassOfElementNC,
386
+ "for a finite semigroup with CanUseFroidurePin and multiplicative element",
387
+ [IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
388
+ GreensLClassOfElement);
389
+
390
+ InstallMethod(GreensHClassOfElementNC,
391
+ "for a finite semigroup with CanUseFroidurePin and multiplicative element",
392
+ [IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
393
+ GreensHClassOfElement);
394
+
395
+ InstallMethod(GreensDClassOfElementNC,
396
+ "for a finite semigroup with CanUseFroidurePin and multiplicative element",
397
+ [IsSemigroup and CanUseFroidurePin and IsFinite, IsMultiplicativeElement],
398
+ GreensDClassOfElement);
399
+
400
+ #############################################################################
401
+ ## 5. Collections of classes, and reps
402
+ #############################################################################
403
+
404
+ ## numbers of classes
405
+
406
+ InstallMethod(NrDClasses, "for a semigroup with CanUseFroidurePin",
407
+ [IsSemigroup and CanUseFroidurePin],
408
+ S -> Length(GreensDRelation(S)!.data.comps));
409
+
410
+ InstallMethod(NrLClasses, "for a semigroup with CanUseFroidurePin",
411
+ [IsSemigroup and CanUseFroidurePin],
412
+ S -> Length(GreensLRelation(S)!.data.comps));
413
+
414
+ InstallMethod(NrRClasses, "for a semigroup with CanUseFroidurePin",
415
+ [IsSemigroup and CanUseFroidurePin],
416
+ S -> Length(GreensRRelation(S)!.data.comps));
417
+
418
+ InstallMethod(NrHClasses, "for a semigroup with CanUseFroidurePin",
419
+ [IsSemigroup and CanUseFroidurePin],
420
+ S -> Length(GreensHRelation(S)!.data.comps));
421
+
422
+ # same method for ideals
423
+
424
+ InstallMethod(GreensLClasses,
425
+ "for a finite semigroup with CanUseFroidurePin",
426
+ [IsSemigroup and CanUseFroidurePin],
427
+ function(S)
428
+ if not IsFinite(S) then
429
+ TryNextMethod();
430
+ fi;
431
+ return SEMIGROUPS.GreensXClasses(S, GreensLRelation, GreensLClassOfElement);
432
+ end);
433
+
434
+ # same method for ideals
435
+
436
+ InstallMethod(GreensRClasses,
437
+ "for a finite semigroup with CanUseFroidurePin",
438
+ [IsSemigroup and CanUseFroidurePin],
439
+ function(S)
440
+ if not IsFinite(S) then
441
+ TryNextMethod();
442
+ fi;
443
+ return SEMIGROUPS.GreensXClasses(S, GreensRRelation, GreensRClassOfElement);
444
+ end);
445
+
446
+ # same method for ideals
447
+
448
+ InstallMethod(GreensHClasses,
449
+ "for a finite semigroup with CanUseFroidurePin",
450
+ [IsSemigroup and CanUseFroidurePin],
451
+ function(S)
452
+ if not IsFinite(S) then
453
+ TryNextMethod();
454
+ fi;
455
+ return SEMIGROUPS.GreensXClasses(S, GreensHRelation, GreensHClassOfElement);
456
+ end);
457
+
458
+ # same method for ideals
459
+
460
+ InstallMethod(GreensDClasses,
461
+ "for a finite semigroup with CanUseFroidurePin",
462
+ [IsSemigroup and CanUseFroidurePin],
463
+ function(S)
464
+ if not IsFinite(S) then
465
+ TryNextMethod();
466
+ fi;
467
+ return SEMIGROUPS.GreensXClasses(S, GreensDRelation, GreensDClassOfElement);
468
+ end);
469
+
470
+ ## Green's classes of a Green's class
471
+
472
+ InstallMethod(GreensLClasses,
473
+ "for Green's D-class of a semigroup with CanUseFroidurePin",
474
+ [IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
475
+ function(C)
476
+ return SEMIGROUPS.GreensXClassesOfClass(C, GreensLRelation,
477
+ GreensLClassOfElement);
478
+ end);
479
+
480
+ InstallMethod(GreensRClasses,
481
+ "for a Green's D-class of a semigroup with CanUseFroidurePin",
482
+ [IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
483
+ function(C)
484
+ return SEMIGROUPS.GreensXClassesOfClass(C,
485
+ GreensRRelation,
486
+ GreensRClassOfElement);
487
+ end);
488
+
489
+ InstallMethod(GreensHClasses,
490
+ "for a Green's class of a semigroup with CanUseFroidurePin",
491
+ [IsGreensClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
492
+ function(C)
493
+ if not (IsGreensRClass(C) or IsGreensLClass(C) or IsGreensDClass(C)) then
494
+ ErrorNoReturn("the argument is not a Green's R-, L-, or D-class");
495
+ fi;
496
+ return SEMIGROUPS.GreensXClassesOfClass(C, GreensHRelation,
497
+ GreensHClassOfElement);
498
+ end);
499
+
500
+ ## Representatives
501
+
502
+ InstallMethod(DClassReps, "for a semigroup with CanUseFroidurePin",
503
+ [IsSemigroup and CanUseFroidurePin],
504
+ S -> SEMIGROUPS.XClassReps(S, GreensDRelation));
505
+
506
+ InstallMethod(RClassReps, "for a semigroup with CanUseFroidurePin",
507
+ [IsSemigroup and CanUseFroidurePin],
508
+ S -> SEMIGROUPS.XClassReps(S, GreensRRelation));
509
+
510
+ InstallMethod(LClassReps, "for a semigroup with CanUseFroidurePin",
511
+ [IsSemigroup and CanUseFroidurePin],
512
+ S -> SEMIGROUPS.XClassReps(S, GreensLRelation));
513
+
514
+ InstallMethod(HClassReps, "for a semigroup with CanUseFroidurePin",
515
+ [IsSemigroup and CanUseFroidurePin],
516
+ S -> SEMIGROUPS.XClassReps(S, GreensHRelation));
517
+
518
+ InstallMethod(RClassReps,
519
+ "for a Green's D-class of a semigroup with CanUseFroidurePin",
520
+ [IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
521
+ D -> SEMIGROUPS.XClassRepsOfClass(D, GreensRRelation));
522
+
523
+ InstallMethod(LClassReps,
524
+ "for a Green's D-class of a semigroup with CanUseFroidurePin",
525
+ [IsGreensDClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
526
+ D -> SEMIGROUPS.XClassRepsOfClass(D, GreensLRelation));
527
+
528
+ InstallMethod(HClassReps,
529
+ "for a Green's class of a semigroup with CanUseFroidurePin",
530
+ [IsGreensClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
531
+ C -> SEMIGROUPS.XClassRepsOfClass(C, GreensHRelation));
532
+
533
+ # There is duplicate code in here and in maximal D-classes.
534
+ #
535
+ # This cannot be replaced with the method for IsSemigroup and IsFinite since
536
+ # the value of GreensDRelation(S)!.data.comps is not the same as the output of
537
+ # DigraphStronglyConnectedComponents.
538
+
539
+ InstallMethod(PartialOrderOfDClasses,
540
+ "for a finite semigroup with CanUseFroidurePin",
541
+ [IsSemigroup and CanUseFroidurePin and IsFinite],
542
+ function(S)
543
+ local D;
544
+ if not IsBound(GreensDRelation(S)!.data) then
545
+ # Acting semigroups CanUseFroidurePin, but may not have this data.
546
+ TryNextMethod();
547
+ fi;
548
+ D := DigraphMutableCopy(LeftCayleyDigraph(S));
549
+ DigraphEdgeUnion(D, RightCayleyDigraph(S));
550
+ QuotientDigraph(D, GreensDRelation(S)!.data.comps);
551
+ DigraphRemoveLoops(D);
552
+ Apply(OutNeighbours(D), Set);
553
+ MakeImmutable(D);
554
+ return D;
555
+ end);
556
+
557
+ InstallMethod(PartialOrderOfLClasses,
558
+ "for a finite semigroup that CanUseFroidurePin",
559
+ [IsSemigroup and CanUseFroidurePin and IsFinite],
560
+ function(S)
561
+ local D, comps, enum, canon, actual, perm;
562
+
563
+ D := DigraphMutableCopy(LeftCayleyDigraph(S));
564
+ comps := DigraphStronglyConnectedComponents(LeftCayleyDigraph(S)).comps;
565
+ QuotientDigraph(D, comps);
566
+ if not IsBound(GreensLRelation(S)!.data) then
567
+ # Rectify the ordering of the Green's classes, if necessary
568
+ enum := EnumeratorCanonical(S);
569
+ canon := SortingPerm(List(comps, x -> LClass(S, enum[x[1]])));
570
+ actual := SortingPerm(GreensLClasses(S));
571
+ perm := canon / actual;
572
+ if not IsOne(perm) then
573
+ D := OnDigraphs(D, perm);
574
+ fi;
575
+ fi;
576
+ DigraphRemoveLoops(D);
577
+ Apply(OutNeighbours(D), Set);
578
+ MakeImmutable(D);
579
+ return D;
580
+ end);
581
+
582
+ InstallMethod(PartialOrderOfRClasses,
583
+ "for a finite semigroup that CanUseFroidurePin",
584
+ [IsSemigroup and CanUseFroidurePin and IsFinite],
585
+ function(S)
586
+ local D, comps, enum, canon, actual, perm;
587
+
588
+ D := DigraphMutableCopy(RightCayleyDigraph(S));
589
+ comps := DigraphStronglyConnectedComponents(RightCayleyDigraph(S)).comps;
590
+ QuotientDigraph(D, comps);
591
+
592
+ if not IsBound(GreensRRelation(S)!.data) then
593
+ # Rectify the ordering of the Green's classes, if necessary
594
+ enum := EnumeratorCanonical(S);
595
+ canon := SortingPerm(List(comps, x -> RClass(S, enum[x[1]])));
596
+ actual := SortingPerm(GreensRClasses(S));
597
+ perm := canon / actual;
598
+ if not IsOne(perm) then
599
+ D := OnDigraphs(D, perm);
600
+ fi;
601
+ fi;
602
+ DigraphRemoveLoops(D);
603
+ Apply(OutNeighbours(D), Set);
604
+ MakeImmutable(D);
605
+ return D;
606
+ end);
607
+
608
+ InstallMethod(LeftGreensMultiplierNC,
609
+ "for a semigroup that can use Froidure-Pin and L-related elements",
610
+ [IsSemigroup and CanUseFroidurePin,
611
+ IsMultiplicativeElement,
612
+ IsMultiplicativeElement],
613
+ function(S, a, b)
614
+ local gens, D, path, a1, b1;
615
+ gens := GeneratorsOfSemigroup(S);
616
+ D := LeftCayleyDigraph(S);
617
+ a1 := PositionCanonical(S, a);
618
+ b1 := PositionCanonical(S, b);
619
+ path := NextIterator(IteratorOfPaths(D, a1, b1));
620
+ if path = fail then
621
+ # This can occur when, for example, a = b and S is not a monoid.
622
+ if IsMultiplicativeElementWithOne(a)
623
+ and IsMultiplicativeElementWithOne(b) then
624
+ return One(gens);
625
+ elif MultiplicativeNeutralElement(S) <> fail then
626
+ return MultiplicativeNeutralElement(S);
627
+ else
628
+ return SEMIGROUPS.UniversalFakeOne;
629
+ fi;
630
+ fi;
631
+ return EvaluateWord(gens, Reversed(path[2]));
632
+ end);
633
+
634
+ InstallMethod(RightGreensMultiplierNC,
635
+ "for a semigroup that can use Froidure-Pin and R-related elements",
636
+ [IsSemigroup and CanUseFroidurePin,
637
+ IsMultiplicativeElement,
638
+ IsMultiplicativeElement],
639
+ function(S, a, b)
640
+ local gens, D, path, a1, b1;
641
+ gens := GeneratorsOfSemigroup(S);
642
+ D := RightCayleyDigraph(S);
643
+ a1 := PositionCanonical(S, a);
644
+ b1 := PositionCanonical(S, b);
645
+ path := NextIterator(IteratorOfPaths(D, a1, b1));
646
+ if path = fail then
647
+ # This can occur when, for example, a = b and S is not a monoid.
648
+ if IsMultiplicativeElementWithOne(a)
649
+ and IsMultiplicativeElementWithOne(b) then
650
+ return One(gens);
651
+ elif MultiplicativeNeutralElement(S) <> fail then
652
+ return MultiplicativeNeutralElement(S);
653
+ else
654
+ return SEMIGROUPS.UniversalFakeOne;
655
+ fi;
656
+ fi;
657
+ return EvaluateWord(gens, path[2]);
658
+ end);
659
+
660
+ #############################################################################
661
+ ## 6. Idempotents . . .
662
+ #############################################################################
663
+
664
+ InstallMethod(NrIdempotents,
665
+ "for a Green's class of a semigroup that CanUseFroidurePin",
666
+ [IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
667
+ function(C)
668
+ local rel, pos;
669
+ rel := EquivalenceClassRelation(C);
670
+ pos := IdempotentsSubset(Range(rel),
671
+ rel!.data.comps[SEMIGROUPS.XClassIndex(C)]);
672
+ return Length(pos);
673
+ end);
674
+
675
+ InstallMethod(Idempotents,
676
+ "for a Green's class of a semigroup that CanUseFroidurePin",
677
+ [IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
678
+ function(C)
679
+ local rel, pos;
680
+ rel := EquivalenceClassRelation(C);
681
+ pos := IdempotentsSubset(Range(rel),
682
+ rel!.data.comps[SEMIGROUPS.XClassIndex(C)]);
683
+ return EnumeratorCanonical(Range(rel)){pos};
684
+ end);
685
+
686
+ #############################################################################
687
+ ## 7. Mappings etc . . .
688
+ #############################################################################
689
+
690
+ InstallMethod(IsomorphismPermGroup, "for H-class of a semigroup",
691
+ [IsGreensHClass and IsGreensClassOfSemigroupThatCanUseFroidurePinRep],
692
+ function(H)
693
+ local G, S, N, HH, lookup, pos, x, map, inverses, GG, inv, i;
694
+
695
+ if not IsGroupHClass(H) then
696
+ ErrorNoReturn("the argument (a Green's H-class) is not a group");
697
+ fi;
698
+
699
+ G := Group(());
700
+ S := EnumeratorCanonical(Parent(H));
701
+ N := Size(H);
702
+ HH := Enumerator(H);
703
+ # Position(S, x) -> Position(H, x)
704
+ lookup := ListWithIdenticalEntries(Length(S), fail);
705
+ for i in [1 .. N] do
706
+ pos := Position(S, HH[i]);
707
+ lookup[pos] := i;
708
+ od;
709
+
710
+ for x in H do
711
+ x := PermList(List([1 .. N], i -> lookup[Position(S, HH[i] * x)]));
712
+ if not x in G then
713
+ G := ClosureGroup(G, x);
714
+ if Size(G) = N then
715
+ break;
716
+ fi;
717
+ fi;
718
+ od;
719
+
720
+ GG := EnumeratorSorted(G);
721
+
722
+ map := function(x)
723
+ if not x in H then
724
+ ErrorNoReturn("the argument does not belong to the domain of the ",
725
+ "function");
726
+ fi;
727
+ return GG[lookup[Position(S, HH[1] * x)]];
728
+ end;
729
+ inverses := [];
730
+ for i in [1 .. N] do
731
+ inverses[Position(GG, map(HH[i]))] := HH[i];
732
+ od;
733
+ inv := function(x)
734
+ if not x in G then
735
+ ErrorNoReturn("the argument does not belong to the domain of the ",
736
+ "function");
737
+ fi;
738
+ return inverses[Position(GG, x)];
739
+ end;
740
+ return MappingByFunction(H, G, map, inv);
741
+ end);