passagemath-gap-pkg-semigroups 10.6.30__cp312-abi3-macosx_13_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of passagemath-gap-pkg-semigroups might be problematic. Click here for more details.

Files changed (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-apple-darwin23-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1158 -0
  17. gap/pkg/semigroups/config.status +1131 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.30.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.30.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.30.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.30.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,889 @@
1
+ #############################################################################
2
+ ##
3
+ ## semigroups/semieunit.gi
4
+ ## Copyright (C) 2017-2022 Christopher Russell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+
10
+ #############################################################################
11
+ # Methods for creating McAlister triple semigroups
12
+ #############################################################################
13
+
14
+ InstallMethod(McAlisterTripleSemigroup,
15
+ "for a group, digraph, digraph, and action",
16
+ [IsGroup, IsDigraph, IsDigraph, IsFunction],
17
+ function(G, X, Y, act)
18
+ local anti_act, hom, out_nbrs, orbs, min, fam, filt, M, x, y;
19
+
20
+ if not IsFinite(G) then
21
+ ErrorNoReturn("the 1st argument (a group) is not finite");
22
+ fi;
23
+
24
+ anti_act := {pt, g} -> act(pt, g ^ -1);
25
+
26
+ hom := ActionHomomorphism(G, DigraphVertices(X), anti_act);
27
+
28
+ if ForAny(GeneratorsOfGroup(Image(hom)),
29
+ g -> not IsDigraphAutomorphism(X, g)) then
30
+ ErrorNoReturn("the 1st argument (a group) must act by order ",
31
+ "automorphisms on the 2nd argument (a partial order ",
32
+ "digraph)");
33
+ elif not IsPartialOrderDigraph(X) then
34
+ ErrorNoReturn("the 2nd argument (a digraph) must be a partial order ",
35
+ "digraph");
36
+ fi;
37
+
38
+ # Check that Y is a semilattice and an induced subdigraph of X
39
+ if Y <> InducedSubdigraph(X, DigraphVertexLabels(Y)) then
40
+ ErrorNoReturn("the 3rd argument <X> (a digraph) must be an induced ",
41
+ "subdigraph of the 2nd argument <Y> (a digraph) with ",
42
+ "vertex labels corresponding to the vertices of <X> on ",
43
+ "which <Y> was induced");
44
+ elif not IsJoinSemilatticeDigraph(Y) then
45
+ ErrorNoReturn("the 3rd argument (a digraph) must be a join-semilattice ",
46
+ "digraph");
47
+ fi;
48
+
49
+ # Check condition M2 (check that Y is an order ideal of X.)
50
+ out_nbrs := OutNeighbors(X);
51
+ for x in DigraphVertices(X) do
52
+ if not x in DigraphVertexLabels(Y) then
53
+ for y in DigraphSources(DigraphRemoveLoops(Y)) do
54
+ if x in out_nbrs[DigraphVertexLabel(Y, y)] then
55
+ ErrorNoReturn("the out-neighbours of each vertex of the 2nd ",
56
+ "argument (a digraph) which is in the 3rd argument ",
57
+ "<Y> (a digraph) must contain only vertices which ",
58
+ "are in <Y> - see the documentation for more details");
59
+ fi;
60
+ od;
61
+ fi;
62
+ od;
63
+
64
+ orbs := Orbits(Image(hom));
65
+
66
+ # Check condition M3 (check that G.Y = X.)
67
+ if not ForAll(orbs, o -> ForAny(DigraphVertexLabels(Y), v -> v in o)) then
68
+ ErrorNoReturn("every vertex of <X> must be in the orbit of some vertex ",
69
+ "of <X> which is in <Y> - see the documentation ",
70
+ "for more detail");
71
+ fi;
72
+
73
+ for x in DigraphVertices(X) do
74
+ if not x in Union(orbs) and not (x in DigraphVertexLabels(Y)) then
75
+ ErrorNoReturn("every vertex of <X> must be in the orbit of some ",
76
+ "vertex of <X> which is in <Y> - see the documentation",
77
+ " for more detail");
78
+ fi;
79
+ od;
80
+
81
+ # Check condition M4 (essentially, check that G.Y = X is connected.)
82
+ min := DigraphVertexLabel(Y, DigraphSinks(DigraphRemoveLoops(Y))[1]);
83
+ if ForAny(GeneratorsOfGroup(Image(hom)), g -> min ^ g <> min) then
84
+ ErrorNoReturn("<act> must fix the vertex of <X> which is the minimal ",
85
+ "vertex of <Y> - see the documentation for more detail");
86
+ fi;
87
+
88
+ fam := NewFamily("McAlisterTripleSemigroupFamily",
89
+ IsMcAlisterTripleSemigroupElement);
90
+
91
+ # Check if this McAlister triple semigroup is a monoid
92
+ if IsMeetSemilatticeDigraph(Y) then
93
+ filt := IsMcAlisterTripleSemigroup and IsMonoid;
94
+ else
95
+ filt := IsMcAlisterTripleSemigroup;
96
+ fi;
97
+
98
+ # Create the semigroup itself
99
+ M := Objectify(NewType(CollectionsFamily(fam), filt and IsAttributeStoringRep
100
+ and IsEUnitaryInverseSemigroup and IsWholeFamily),
101
+ rec());
102
+
103
+ M!.elementType := NewType(fam, IsMcAlisterTripleSemigroupElementRep);
104
+
105
+ SetMcAlisterTripleSemigroupGroup(M, G);
106
+ SetMcAlisterTripleSemigroupAction(M, anti_act);
107
+ SetMcAlisterTripleSemigroupUnderlyingAction(M, act);
108
+ SetMcAlisterTripleSemigroupPartialOrder(M, X);
109
+ SetMcAlisterTripleSemigroupSemilattice(M, Y);
110
+ SetMcAlisterTripleSemigroupActionHomomorphism(M, hom);
111
+
112
+ SetGeneratorsOfSemigroup(M, SEMIGROUPS.MTSSmallGen(M));
113
+ return M;
114
+ end);
115
+
116
+ InstallMethod(McAlisterTripleSemigroup,
117
+ "for a perm group, digraph, and digraph",
118
+ [IsPermGroup, IsDigraph, IsDigraph],
119
+ {G, X, Y} -> McAlisterTripleSemigroup(G, X, Y, OnPoints));
120
+
121
+ InstallMethod(McAlisterTripleSemigroup,
122
+ "for a perm group, digraph, homogeneous list, and action",
123
+ [IsGroup, IsDigraph, IsHomogeneousList, IsFunction],
124
+ {G, X, sub_ver, act} ->
125
+ McAlisterTripleSemigroup(G, X, InducedSubdigraph(X, sub_ver), act));
126
+
127
+ InstallMethod(McAlisterTripleSemigroup,
128
+ "for a perm group, digraph, and homogeneous list",
129
+ [IsPermGroup, IsDigraph, IsHomogeneousList],
130
+ function(G, X, sub_ver)
131
+ return McAlisterTripleSemigroup(G,
132
+ X,
133
+ InducedSubdigraph(X, sub_ver),
134
+ OnPoints);
135
+ end);
136
+
137
+ #############################################################################
138
+ # Methods for McAlister triple semigroups
139
+ #############################################################################
140
+
141
+ InstallMethod(OneImmutable, "for a McAlister triple semigroup element",
142
+ [IsMcAlisterTripleSemigroupElement],
143
+ x -> OneImmutable(MTSEParent(x)));
144
+
145
+ InstallMethod(OneImmutable,
146
+ "for a McAlister triple semigroup element collection",
147
+ [IsMcAlisterTripleSemigroupElementCollection],
148
+ function(coll)
149
+ local Y;
150
+
151
+ if not IsSemigroup(coll) then
152
+ coll := MTSEParent(Representative(coll));
153
+ fi;
154
+ if not IsMonoid(coll) then
155
+ return fail;
156
+ fi;
157
+ Y := McAlisterTripleSemigroupSemilattice(coll);
158
+ return MTSE(coll, DigraphSources(DigraphRemoveLoops(Y))[1], ());
159
+ end);
160
+
161
+ InstallMethod(McAlisterTripleSemigroupComponents,
162
+ "for a McAlister triple semigroup",
163
+ [IsMcAlisterTripleSemigroup and IsWholeFamily],
164
+ function(S)
165
+ local G, XX, YY, act, comps, id, next, o, v;
166
+
167
+ G := McAlisterTripleSemigroupGroup(S);
168
+ XX := McAlisterTripleSemigroupPartialOrder(S);
169
+ YY := McAlisterTripleSemigroupSemilattice(S);
170
+ act := McAlisterTripleSemigroupAction(S);
171
+
172
+ comps := [];
173
+ id := ListWithIdenticalEntries(DigraphNrVertices(XX), 0);
174
+ next := 1;
175
+
176
+ for v in DigraphVertexLabels(YY) do
177
+ if id[v] = 0 then
178
+ o := Intersection(Orbit(G, v, act), DigraphVertexLabels(YY));
179
+ Add(comps, o);
180
+ id{o} := ListWithIdenticalEntries(Length(o), next);
181
+ next := next + 1;
182
+ fi;
183
+ od;
184
+ return rec(comps := comps, id := id);
185
+ end);
186
+
187
+ InstallMethod(McAlisterTripleSemigroupQuotientDigraph,
188
+ "for a McAlister triple semigroup",
189
+ [IsMcAlisterTripleSemigroup and IsWholeFamily],
190
+ function(S)
191
+ local YY_XX, comps, D;
192
+ YY_XX := McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap(S);
193
+ # Convert components to vertices of Y, rather than their labels in X.
194
+ comps := List(McAlisterTripleSemigroupComponents(S).comps, c -> YY_XX{c});
195
+ D := DigraphMutableCopy(McAlisterTripleSemigroupSemilattice(S));
196
+ D := QuotientDigraph(D, comps);
197
+ DigraphRemoveAllMultipleEdges(D);
198
+ MakeImmutable(D);
199
+ return D;
200
+ end);
201
+
202
+ InstallMethod(McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap,
203
+ "for a McAlister triple semigroup",
204
+ [IsMcAlisterTripleSemigroup and IsWholeFamily],
205
+ function(S)
206
+ local XX, YY, XX_YY, YY_XX, i;
207
+ XX := McAlisterTripleSemigroupPartialOrder(S);
208
+ YY := McAlisterTripleSemigroupSemilattice(S);
209
+ XX_YY := DigraphVertexLabels(YY);
210
+ if XX_YY <> DigraphVertices(XX) then
211
+ YY_XX := ListWithIdenticalEntries(DigraphNrVertices(XX), 0);
212
+ for i in [1 .. Length(XX_YY)] do
213
+ YY_XX[XX_YY[i]] := i;
214
+ od;
215
+ else
216
+ return XX_YY;
217
+ fi;
218
+ return YY_XX;
219
+ end);
220
+
221
+ InstallMethod(String, "for a McAlister triple subsemigroup",
222
+ [IsMcAlisterTripleSubsemigroup],
223
+ RankFilter(IsInverseSemigroup and HasGeneratorsOfSemigroup),
224
+ function(S)
225
+ local G, X, Y;
226
+ if not IsWholeFamily(S) then
227
+ return Concatenation("Semigroup(", String(GeneratorsOfSemigroup(S)), ")");
228
+ fi;
229
+ G := McAlisterTripleSemigroupGroup(S);
230
+ X := McAlisterTripleSemigroupPartialOrder(S);
231
+ Y := McAlisterTripleSemigroupSemilattice(S);
232
+ return StringFormatted("McAlisterTripleSemigroup({}, {}, {})",
233
+ String(G),
234
+ String(X),
235
+ String(DigraphVertexLabels(Y)));
236
+ end);
237
+
238
+ InstallMethod(PrintObj, "for a McAlister triple subsemigroup",
239
+ [IsMcAlisterTripleSubsemigroup],
240
+ function(S)
241
+ Print(String(S));
242
+ end);
243
+
244
+ # TODO(later) Linebreak hints
245
+
246
+ InstallMethod(ViewString, "for a McAlister triple semigroup",
247
+ [IsMcAlisterTripleSemigroup],
248
+ SUM_FLAGS,
249
+ # to beat the library method for IsInverseSemigroup, or IsInverseMonoid
250
+ function(S)
251
+ local G;
252
+ G := McAlisterTripleSemigroupGroup(S);
253
+ return StringFormatted("<McAlister triple semigroup over {}>",
254
+ ViewString(G));
255
+ end);
256
+
257
+ InstallMethod(ViewString, "for a McAlister triple subsemigroup",
258
+ [IsMcAlisterTripleSubsemigroup],
259
+ SUM_FLAGS,
260
+ # to beat the library method for IsInverseSemigroup, or IsInverseMonoid
261
+ function(S)
262
+ local G;
263
+ if HasIsMcAlisterTripleSemigroup(S) and IsMcAlisterTripleSemigroup(S) then
264
+ TryNextMethod();
265
+ fi;
266
+ G := McAlisterTripleSemigroupGroup(S);
267
+ return Concatenation("<McAlister triple subsemigroup over ",
268
+ ViewString(G), ">");
269
+ end);
270
+
271
+ InstallMethod(IsomorphismSemigroups, "for two McAlister triple semigroups",
272
+ [IsMcAlisterTripleSemigroup, IsMcAlisterTripleSemigroup],
273
+ function(S, T)
274
+ local YS, YT, XT, iso_g, iso_x, im_YS, rep, A, hom;
275
+
276
+ iso_g := IsomorphismGroups(McAlisterTripleSemigroupGroup(S),
277
+ McAlisterTripleSemigroupGroup(T));
278
+
279
+ if iso_g = fail then
280
+ return fail;
281
+ fi;
282
+
283
+ YS := McAlisterTripleSemigroupSemilattice(S);
284
+ YT := McAlisterTripleSemigroupSemilattice(T);
285
+ XT := McAlisterTripleSemigroupPartialOrder(T);
286
+
287
+ if not IsIsomorphicDigraph(YS, YT) then
288
+ return fail;
289
+ fi;
290
+
291
+ iso_x := IsomorphismDigraphs(McAlisterTripleSemigroupPartialOrder(S), XT);
292
+
293
+ if iso_x = fail then
294
+ return fail;
295
+ fi;
296
+
297
+ im_YS := List(DigraphVertexLabels(YS), a -> a ^ iso_x);
298
+ # if the restriction of iso_x to DigraphVertexLabels(YS) is not
299
+ # DigraphVertexLabels(YT) then we need to compose iso_x with an
300
+ # automorphism of McAlisterTripleSemilattice(T). Composing this with
301
+ # iso_x will restrict to an isomorphism from (the labels of) YS to YT.
302
+ if im_YS <> DigraphVertexLabels(YT) then
303
+ A := AutomorphismGroup(XT);
304
+ rep := RepresentativeAction(A, im_YS, DigraphVertexLabels(YT), OnSets);
305
+ if rep = fail then
306
+ return fail;
307
+ fi;
308
+ else
309
+ rep := ();
310
+ fi;
311
+
312
+ if ForAll(McAlisterTripleSemigroupGroup(S),
313
+ g -> ForAll(DigraphVertices(McAlisterTripleSemigroupPartialOrder(S)),
314
+ x -> (McAlisterTripleSemigroupAction(S)(x, g)) ^ (rep * iso_x) =
315
+ McAlisterTripleSemigroupAction(T)((x ^ iso_x), (g ^ iso_g)) ^ rep)) then
316
+ hom := SemigroupHomomorphismByFunctionNC(S,
317
+ T,
318
+ s -> MTSE(T,
319
+ s[1] ^ iso_x,
320
+ s[2] ^ iso_g));
321
+ SetIsBijective(hom, true);
322
+ return hom;
323
+ fi;
324
+ return fail;
325
+ end);
326
+
327
+ InstallMethod(McAlisterTripleSemigroupGroup,
328
+ "for a McAlister triple subsemigroup",
329
+ [IsMcAlisterTripleSubsemigroup],
330
+ S -> McAlisterTripleSemigroupGroup(MTSEParent(Representative(S))));
331
+
332
+ InstallMethod(McAlisterTripleSemigroupPartialOrder,
333
+ "for a McAlister triple subsemigroup",
334
+ [IsMcAlisterTripleSubsemigroup],
335
+ S -> McAlisterTripleSemigroupPartialOrder(MTSEParent(Representative(S))));
336
+
337
+ InstallMethod(McAlisterTripleSemigroupSemilattice,
338
+ "for a McAlister triple subsemigroup",
339
+ [IsMcAlisterTripleSubsemigroup],
340
+ S -> McAlisterTripleSemigroupSemilattice(MTSEParent(Representative(S))));
341
+
342
+ InstallMethod(McAlisterTripleSemigroupAction,
343
+ "for a McAlister triple subsemigroup",
344
+ [IsMcAlisterTripleSubsemigroup],
345
+ S -> McAlisterTripleSemigroupAction(MTSEParent(Representative(S))));
346
+
347
+ InstallMethod(McAlisterTripleSemigroupActionHomomorphism,
348
+ "for a McAlister triple subsemigroup",
349
+ [IsMcAlisterTripleSubsemigroup],
350
+ S -> MTSActionHomomorphism(MTSEParent(Representative(S))));
351
+
352
+ InstallMethod(McAlisterTripleSemigroupUnderlyingAction,
353
+ "for a McAlister triple subsemigroup",
354
+ [IsMcAlisterTripleSubsemigroup],
355
+ S -> MTSUnderlyingAction(MTSEParent(Representative(S))));
356
+
357
+ InstallMethod(McAlisterTripleSemigroupComponents,
358
+ "for a McAlister triple subsemigroup",
359
+ [IsMcAlisterTripleSubsemigroup],
360
+ S -> MTSComponents(MTSEParent(Representative(S))));
361
+
362
+ InstallMethod(McAlisterTripleSemigroupQuotientDigraph,
363
+ "for a McAlister triple subsemigroup",
364
+ [IsMcAlisterTripleSubsemigroup],
365
+ S -> MTSQuotientDigraph(MTSEParent(Representative(S))));
366
+
367
+ InstallMethod(McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap,
368
+ "for a McAlister triple subsemigroup",
369
+ [IsMcAlisterTripleSubsemigroup],
370
+ S -> MTSSemilatticeVertexLabelInverseMap(MTSEParent(Representative(S))));
371
+
372
+ SEMIGROUPS.MTSSmallGen := function(S)
373
+ local G, Sl, X_Y, Y_X, comps, RepAct, _Stab, act, gens, po, top, sl, above, c,
374
+ stab, check, orbs, stabs, found, Gcj, j, nbrs, r, i, cat, pos, combined,
375
+ new_orbs, g, n, sizes, Gc1, alpha, gs, u, nbr, v, o, orb;
376
+
377
+ G := McAlisterTripleSemigroupGroup(S);
378
+ Sl := McAlisterTripleSemigroupSemilattice(S);
379
+ X_Y := DigraphVertexLabels(Sl);
380
+ Y_X := McAlisterTripleSemigroupSemilatticeVertexLabelInverseMap(S);
381
+ comps := McAlisterTripleSemigroupComponents(S).comps;
382
+
383
+ if McAlisterTripleSemigroupUnderlyingAction(S) = OnPoints then
384
+ RepAct := {a, b} -> RepresentativeAction(G, b, a);
385
+ _Stab := a -> Stabilizer(G, a);
386
+ else
387
+ # Can't use McAlisterTripleSemigroupAction because it is an anti-action
388
+ # but not an action and produces unexpected results with some of these
389
+ # methods.
390
+ act := McAlisterTripleSemigroupUnderlyingAction(S);
391
+ RepAct := {a, b} -> RepresentativeAction(G, b, a, act);
392
+ gens := Generators(G);
393
+ _Stab := a -> Stabilizer(G, a, act);
394
+ fi;
395
+
396
+ # We use reflexive transitive reductions so we can only check neighbours
397
+ # u > v such that there is no w where u > w > v.
398
+ gens := [];
399
+ po := MTSQuotientDigraph(S); # Vertex i corresponds to comps[i].
400
+ po := DigraphReflexiveTransitiveReduction(po);
401
+ top := Reversed(DigraphTopologicalSort(po)); # Order D-classes top 1st.
402
+ sl := DigraphReflexiveTransitiveReduction(Sl);
403
+ SetDigraphVertexLabels(sl, DigraphVertexLabels(Sl)); # Preserve labelling.
404
+ for i in [1 .. Length(top)] do
405
+ above := Filtered(top{[1 .. i - 1]}, j -> Y_X[j]
406
+ in InNeighboursOfVertex(po, top[i]));
407
+ c := comps[top[i]];
408
+
409
+ if IsEmpty(above) then # Add generating set for this D-class.
410
+ stab := GeneratorsOfGroup(_Stab(c[1]));
411
+ for g in stab do
412
+ # Add gens of maximal subgroup of R-class.
413
+ Add(gens, MTSE(S, c[1], g));
414
+ od;
415
+ if Length(c) > 1 then # Add reps from H-classes of R-class.
416
+ for j in [1 .. Length(c) - 1] do
417
+ Add(gens, MTSE(S, c[j], RepAct(c[j + 1], c[j])));
418
+ od;
419
+ elif IsEmpty(stab) then # If D-class is just a single element, add it.
420
+ Add(gens, MTSE(S, c[1], One(G)));
421
+ fi;
422
+ Add(gens, MTSE(S, Last(c), RepAct(c[1], Last(c))));
423
+
424
+ else # We may have already generated some elements of this D-class.
425
+
426
+ check := false; # Check stays false until we know we have generated at
427
+ # least one element in this D-class.
428
+
429
+ # Figure out which subsections of the D-class are generated
430
+ # stabs are maximal subgroups in these subsections
431
+ # orbs are lambda values, correspond to vertex labels of MTSSemilattice.
432
+ orbs := [];
433
+ stabs := [];
434
+ found := [];
435
+ for u in c do
436
+ if not u in found then
437
+ Gcj := _Stab(u);
438
+ Add(orbs, [u]);
439
+ Add(found, u);
440
+ Add(stabs, Group(()));
441
+ j := Length(orbs);
442
+ nbrs := List(InNeighboursOfVertex(sl, Y_X[u]), v -> X_Y[v]);
443
+ for nbr in nbrs do
444
+ for v in Difference(c, found) do
445
+ if ForAny(Elements(RightCoset(Gcj, RepAct(v, u))),
446
+ x -> MTSAction(S)(nbr, x) in X_Y) then
447
+ Add(orbs[j], v);
448
+ fi;
449
+ od;
450
+
451
+ r := RightCosets(Gcj, stabs[j]);
452
+ i := 1;
453
+ while i <= Length(r) do # TODO(later): make this faster
454
+ if r[i] = RightCoset(stabs[j], One(Gcj)) then
455
+ i := i + 1;
456
+ elif MTSAction(S)(nbr, Representative(r[i])) in X_Y then
457
+ stabs[j] := ClosureGroup(stabs[j], Representative(r[i]));
458
+ r := RightCosets(Gcj, stabs[j]);
459
+ i := 1;
460
+ else
461
+ i := i + 1;
462
+ fi;
463
+ od;
464
+ od;
465
+ found := Union(orbs);
466
+ fi;
467
+ od;
468
+
469
+ # 1 Combine intersecting orbits.
470
+ cat := Concatenation(orbs);
471
+ while not IsDuplicateFreeList(cat) do
472
+ i := 0;
473
+ pos := [];
474
+ while not Size(pos) > 1 do
475
+ i := i + 1;
476
+ pos := Positions(cat, cat[i]);
477
+ od;
478
+
479
+ combined := [];
480
+ new_orbs := [];
481
+ for o in orbs do
482
+ if cat[i] in o then
483
+ Append(combined, o);
484
+ else
485
+ Add(new_orbs, o);
486
+ fi;
487
+ od;
488
+ Add(new_orbs, Set(combined));
489
+ orbs := new_orbs;
490
+ cat := Concatenation(orbs);
491
+ od;
492
+
493
+ # 2 Add generators to link orbits.
494
+ if Size(orbs) <> 1 then
495
+ for orb in orbs{[2 .. Length(orbs)]} do
496
+ g := MTSE(S, orbs[1][1], RepAct(orb[1], orbs[1][1]));
497
+ Add(gens, g);
498
+ Add(gens, g ^ -1); # Could add less gens here
499
+ check := true;
500
+ od;
501
+ fi;
502
+
503
+ # 3 Determine (and add) missing generators of maximal subgroup.
504
+ n := Size(Gcj);
505
+ sizes := List(stabs, Size);
506
+ Gc1 := _Stab(orbs[1][1]);
507
+ if not n in sizes then
508
+ for i in [1 .. Size(stabs) - 1] do
509
+ if IsSubgroup(stabs[1], stabs[i]) then
510
+ continue;
511
+ fi;
512
+ alpha := RepAct(orbs[i][1], orbs[1][1]);
513
+ gs := List(GeneratorsOfGroup(stabs[i]),
514
+ g -> (alpha ^ -1) * g * alpha);
515
+ stabs[1] := ClosureGroup(stabs[1], gs);
516
+ if stabs[1] = Gc1 then
517
+ break;
518
+ fi;
519
+ od;
520
+
521
+ # 3.1 If they are missing then add them.
522
+ for g in GeneratorsOfGroup(Gc1) do
523
+ if not g in stabs[1] then
524
+ Add(gens, MTSE(S, orbs[1][1], g));
525
+ check := true;
526
+ fi;
527
+ od;
528
+ fi;
529
+
530
+ # If we haven't added anything yet and nothing is generated by
531
+ # higher D-classes then add an element.
532
+ if not check and Length(nbrs) = 1 then
533
+ Add(gens, MTSE(S, orbs[1][1], One(G)));
534
+ fi;
535
+
536
+ fi;
537
+ od;
538
+ return SmallSemigroupGeneratingSet(gens);
539
+ end;
540
+
541
+ InstallMethod(IsomorphismSemigroup,
542
+ "for IsMcAlisterTripleSemigroup and a semigroup",
543
+ [IsMcAlisterTripleSemigroup, IsSemigroup],
544
+ function(_, S)
545
+ local Es, iso_pg, G, H, map, xx, M, iso, yy, ids, cong, grp, hom, map_G, Dcl,
546
+ n, cosets, x, xiny, yinx, D, s, R, e, Ge, h, y_pos, x_pos, act, ah, edgy,
547
+ act2, i, isom;
548
+
549
+ if not IsEUnitaryInverseSemigroup(S) then
550
+ ErrorNoReturn("the 2nd argument (a semigroup) is not E-unitary");
551
+ fi;
552
+
553
+ Es := IdempotentGeneratedSubsemigroup(S);
554
+ if Size(Es) = 1 then
555
+ iso_pg := IsomorphismPermGroup(S);
556
+ G := Range(iso_pg);
557
+ map := g -> PermList(Concatenation([1], ListPerm(g) + 1));
558
+ H := Group(List(Generators(G), map));
559
+ map := MappingByFunction(G, H, map);
560
+ xx := Digraph([[1]]);
561
+ M := McAlisterTripleSemigroup(H, xx, xx);
562
+
563
+ iso := s -> MTSE(M, 1, (s ^ iso_pg) ^ map);
564
+ isom := SemigroupHomomorphismByFunctionNC(S, M, iso);
565
+ SetIsBijective(isom, true);
566
+ return isom;
567
+ fi;
568
+
569
+ yy := Digraph(NaturalPartialOrder(Es));
570
+ ids := Elements(Es);
571
+
572
+ cong := MinimumGroupCongruence(S);
573
+ grp := S / cong;
574
+ iso_pg := IsomorphismPermGroup(grp); # This takes a long time, e.g. Sym5.
575
+ G := Range(iso_pg);
576
+ if not IsEmpty(SmallGeneratingSet(G)) then
577
+ G := Group(SmallGeneratingSet(G));
578
+ fi;
579
+ hom := QuotientSemigroupHomomorphism(grp);
580
+ map_G := CompositionMapping(iso_pg, hom);
581
+
582
+ Dcl := DClasses(S);
583
+ n := NrDClasses(S);
584
+ cosets := [];
585
+ x := [];
586
+ xiny := [];
587
+ yinx := [];
588
+ for i in [1 .. n] do
589
+ D := Dcl[i];
590
+ s := Representative(D);
591
+ R := RClass(D, s);
592
+ e := LeftOne(s);
593
+ Ge := Group(List(SmallGeneratingSet(Group(Elements(HClass(D, e)))), g -> g ^
594
+ map_G));
595
+ cosets[i] := RightCosets(G, Ge);
596
+ Append(x, Set(cosets[i], q -> [i, q]));
597
+ for H in HClasses(R) do
598
+ h := Representative(H);
599
+ y_pos := Position(ids, RightOne(h));
600
+ x_pos := Position(x, [i, Ge * (h ^ map_G)]);
601
+
602
+ yinx[y_pos] := x_pos;
603
+ xiny[x_pos] := y_pos;
604
+ od;
605
+ od;
606
+
607
+ act := function(a, g)
608
+ local b;
609
+ b := x[a];
610
+ return Position(x, [b[1], b[2] * g]);
611
+ end;
612
+
613
+ ah := ActionHomomorphism(G, [1 .. Size(x)], act);
614
+ edgy := List(DigraphEdges(yy), e -> [yinx[e[1]], yinx[e[2]]]);
615
+ xx := EdgeOrbitsDigraph(Image(ah), edgy, Size(x));
616
+ xx := DigraphReflexiveTransitiveClosure(xx);
617
+ yy := DigraphReflexiveTransitiveClosure(yy);
618
+ SetDigraphVertexLabels(yy, yinx);
619
+
620
+ act2 := {a, g} -> a ^ (g ^ ah);
621
+ M := McAlisterTripleSemigroup(G, xx, yy, act2);
622
+ iso := s -> MTSE(M, yinx[Position(ids, LeftOne(s))], s ^ map_G);
623
+
624
+ isom := SemigroupHomomorphismByFunctionNC(S, M, iso);
625
+ SetIsBijective(isom, true);
626
+ return isom;
627
+
628
+ end);
629
+
630
+ InstallMethod(IsWholeFamily, "for a McAlister triple semigroup",
631
+ [IsMcAlisterTripleSemigroupElementCollection],
632
+ C -> Size(Elements(C)[1]![3]) = Size(C));
633
+
634
+ #############################################################################
635
+ # Methods for McAlister triple elements
636
+ #############################################################################
637
+
638
+ InstallMethod(McAlisterTripleSemigroupElement,
639
+ "for a McAlister triple semigroup, pos int, and perm",
640
+ [IsMcAlisterTripleSemigroup, IsPosInt, IsMultiplicativeElementWithInverse],
641
+ function(S, A, g)
642
+ if not A in DigraphVertexLabels(McAlisterTripleSemigroupSemilattice(S)) then
643
+ ErrorNoReturn("the 2nd argument should be a vertex label of the ",
644
+ "join-semilattice of the McAlister triple");
645
+ elif not g in McAlisterTripleSemigroupGroup(S) then
646
+ ErrorNoReturn("the 3rd argument must an element of the group of the ",
647
+ "McAlister triple");
648
+ elif not (McAlisterTripleSemigroupAction(S)(A, g ^ -1) in
649
+ DigraphVertexLabels(McAlisterTripleSemigroupSemilattice(S))) then
650
+ ErrorNoReturn("the arguments do not specify an element of the McAlister ",
651
+ "triple semigroup");
652
+ fi;
653
+ return Objectify(S!.elementType, [A, g, S]);
654
+ end);
655
+
656
+ InstallMethod(ELM_LIST,
657
+ "for a McAlister triple semigroup element rep and a pos int",
658
+ [IsMcAlisterTripleSemigroupElementRep, IsPosInt],
659
+ function(x, i)
660
+ if i <= 2 then
661
+ return x![i];
662
+ fi;
663
+ ErrorNoReturn("the 2nd argument (a pos. int.) must be at most 2");
664
+ end);
665
+
666
+ InstallMethod(McAlisterTripleSemigroupElementParent,
667
+ "for a McAlister triple semigroup element rep",
668
+ [IsMcAlisterTripleSemigroupElementRep],
669
+ {x} -> x![3]);
670
+
671
+ InstallMethod(String, "for a McAlister triple semigroup element rep",
672
+ [IsMcAlisterTripleSemigroupElementRep],
673
+ function(x)
674
+ return Concatenation("MTSE(", String(x![3]), ", ", String(x![1]), ", ",
675
+ String(x![2]), ")");
676
+ end);
677
+
678
+ # TODO(later) Linebreak hints
679
+
680
+ InstallMethod(ViewString, "for a McAlister triple semigroup element rep",
681
+ [IsMcAlisterTripleSemigroupElementRep],
682
+ {x} -> Concatenation("(", ViewString(x[1]), ", ", ViewString(x[2]), ")"));
683
+
684
+ InstallMethod(\=, "for two McAlister triple semigroup element reps",
685
+ IsIdenticalObj,
686
+ [IsMcAlisterTripleSemigroupElementRep, IsMcAlisterTripleSemigroupElementRep],
687
+ {x, y} -> x![1] = y![1] and x![2] = y![2] and x![3] = y![3]);
688
+
689
+ InstallMethod(\*, "for two McAlister triple semigroup element reps",
690
+ [IsMcAlisterTripleSemigroupElementRep, IsMcAlisterTripleSemigroupElementRep],
691
+ function(x, y)
692
+ local S;
693
+ S := McAlisterTripleSemigroupElementParent(x);
694
+ if S <> McAlisterTripleSemigroupElementParent(y) then
695
+ ErrorNoReturn("the arguments (McAlister triple elements) do not ",
696
+ "belong to the same McAlister triple semigroup");
697
+ fi;
698
+ return MTSE(S, DigraphVertexLabel(McAlisterTripleSemigroupPartialOrder(S),
699
+ PartialOrderDigraphJoinOfVertices(
700
+ McAlisterTripleSemigroupPartialOrder(S), x[1],
701
+ McAlisterTripleSemigroupAction(S)(y[1], x[2]))),
702
+ x[2] * y[2]);
703
+ end);
704
+
705
+ InstallMethod(\<, "for two McAlister triple semigroup element reps",
706
+ [IsMcAlisterTripleSemigroupElementRep, IsMcAlisterTripleSemigroupElementRep],
707
+ {x, y} -> x[1] < y[1] or (x[1] = y[1] and x[2] < y[2]));
708
+
709
+ InstallMethod(InverseOp, "for a McAlister triple semigroup element rep",
710
+ [IsMcAlisterTripleSemigroupElementRep],
711
+ function(x)
712
+ return MTSE(x![3],
713
+ McAlisterTripleSemigroupAction(x![3])(x[1], Inverse(x[2])),
714
+ Inverse(x[2]));
715
+ end);
716
+
717
+ InstallMethod(\^, "for a McAlister triple semigroup element and a negative int",
718
+ [IsMcAlisterTripleSemigroupElement, IsNegInt],
719
+ {x, i} -> InverseOp(x ^ - i));
720
+
721
+ InstallMethod(LeftOne, "for a McAlister triple semigroup element rep",
722
+ [IsMcAlisterTripleSemigroupElementRep],
723
+ function(x)
724
+ local S;
725
+ S := MTSEParent(x);
726
+ return MTSE(S, x[1], One(MTSGroup(S)));
727
+ end);
728
+
729
+ InstallMethod(RightOne, "for a McAlister triple semigroup element rep",
730
+ [IsMcAlisterTripleSemigroupElementRep],
731
+ function(x)
732
+ local S;
733
+ S := MTSEParent(x);
734
+ return MTSE(S, MTSAction(S)(x[1], x[2] ^ -1), One(MTSGroup(S)));
735
+ end);
736
+
737
+ InstallMethod(ChooseHashFunction, "for McAlister triple semigroup elements",
738
+ [IsMcAlisterTripleSemigroupElement, IsInt],
739
+ function(x, hashlen)
740
+ local data;
741
+ data := [ChooseHashFunction(x[1], hashlen),
742
+ ChooseHashFunction(x[2], hashlen),
743
+ hashlen];
744
+ return rec(func := SEMIGROUPS.HashFunctionForMcAlisterTripleSemigroupElements,
745
+ data := data);
746
+ end);
747
+
748
+ SEMIGROUPS.HashFunctionForMcAlisterTripleSemigroupElements := function(x, data)
749
+ return (17 * data[1].func(x[1], data[1].data)
750
+ + data[2].func(x[2], data[2].data)) mod data[3] + 1;
751
+ end;
752
+
753
+ ###############################################################################
754
+ # F-inverse Semigroups
755
+ ###############################################################################
756
+ # The connected components of the natural partial order will be the
757
+ # congruence classes of the minimum group congruence. Thus we can simply
758
+ # check that precisely one of the sources of the digraph of the natural
759
+ # partial order is in each connected component.
760
+ InstallMethod(IsFInverseMonoid, "for a semigroup",
761
+ [IsSemigroup],
762
+ function(S)
763
+ local comp, po;
764
+ if not IsInverseMonoid(S) then
765
+ return false;
766
+ fi;
767
+ po := Digraph(NaturalPartialOrder(S));
768
+ for comp in DigraphConnectedComponents(po).comps do
769
+ if not Size(Intersection(comp, DigraphSources(po))) = 1 then
770
+ return false;
771
+ fi;
772
+ od;
773
+ return true;
774
+ end);
775
+
776
+ InstallMethod(IsFInverseMonoid, "for a McAlister triple semigroup",
777
+ [IsMcAlisterTripleSemigroup],
778
+ S -> IsMonoid(S) and IsFInverseSemigroup(S));
779
+
780
+ # A McAlister triple semigroup is F-inverse precisely when X, the partial
781
+ # order, is a join-semilattice.
782
+ InstallMethod(IsFInverseSemigroup, "for a McAlister triple semigroup",
783
+ [IsMcAlisterTripleSemigroup],
784
+ S -> IsJoinSemilatticeDigraph(McAlisterTripleSemigroupPartialOrder(S)));
785
+
786
+ # For an inverse semigroup S we denote \sigma_{e,f} = \sigma \cap eSf x eSf.
787
+ # An E-unitary inverse semigroup is said to be an F-inverse semigroup if
788
+ # for each pair of idempotents (e,f): each \sigma_{e,f} class has a maximal
789
+ # element. It is simpler to find an isomorphism and use the above method.
790
+ InstallMethod(IsFInverseSemigroup, "for a semigroup",
791
+ [IsSemigroup],
792
+ function(S)
793
+ if not IsEUnitaryInverseSemigroup(S) then
794
+ return false;
795
+ fi;
796
+ return IsFInverseSemigroup(AsSemigroup(IsMcAlisterTripleSemigroup, S));
797
+ end);
798
+
799
+ ###############################################################################
800
+ # E-unitary inverse covers
801
+ ###############################################################################
802
+ InstallMethod(EUnitaryInverseCover,
803
+ "for an inverse partial perm semigroup",
804
+ [IsInverseSemigroup and IsPartialPermCollection],
805
+ function(S)
806
+ local gens, deg, units, G, P, embed, id, cover_gens, s, g, cover, i;
807
+ gens := GeneratorsOfSemigroup(S);
808
+ deg := DegreeOfPartialPermSemigroup(S);
809
+ units := [];
810
+ for s in gens do
811
+ Add(units, SEMIGROUPS.PartialPermExtendToPerm(s, deg));
812
+ od;
813
+ G := InverseSemigroup(units);
814
+
815
+ P := DirectProduct(S, G);
816
+ embed := SemigroupDirectProductInfo(P).embedding;
817
+ if not IsMonoid(S) then
818
+ id := PartialPerm([1 .. deg]);
819
+ fi;
820
+ cover_gens := [];
821
+ for i in [1 .. Size(gens)] do
822
+ s := embed(gens[i], 1);
823
+ g := embed(units[i], 2);
824
+ if not IsMonoid(S) then
825
+ g := JoinOfPartialPerms(g, id);
826
+ fi;
827
+ Add(cover_gens, s * g);
828
+ od;
829
+
830
+ cover := SemigroupDirectProductInfo(P).projection;
831
+ return SemigroupHomomorphismByFunctionNC(InverseSemigroup(cover_gens),
832
+ S,
833
+ x -> cover(x, 1));
834
+ end);
835
+
836
+ # This method extends a partial perm 'x' to a permutation of degree 'deg'.
837
+ SEMIGROUPS.PartialPermExtendToPerm := function(x, deg)
838
+ local c, i, dom, image;
839
+ image := [];
840
+ # Turn all components into cycles.
841
+ for c in ComponentsOfPartialPerm(x) do
842
+ image[c[1]] := OnPoints(c[1], x);
843
+ if Size(c) > 1 then
844
+ for i in [1 .. Size(c) - 1] do
845
+ image[c[i]] := OnPoints(c[i], x);
846
+ od;
847
+ image[c[i + 1]] := c[1];
848
+ fi;
849
+ od;
850
+ dom := [1 .. deg];
851
+ # Map everything else to itself.
852
+ for i in dom do
853
+ if not IsBound(image[i]) then
854
+ image[i] := i;
855
+ fi;
856
+ od;
857
+ return PartialPerm(dom, image);
858
+ end;
859
+
860
+ InstallMethod(EUnitaryInverseCover, "for a semigroup",
861
+ [IsSemigroup],
862
+ function(S)
863
+ local cov, iso, T;
864
+ if not IsInverseSemigroup(S) then
865
+ ErrorNoReturn("the argument must be an inverse semigroup");
866
+ fi;
867
+ iso := IsomorphismPartialPermSemigroup(S);
868
+ T := Range(iso);
869
+ cov := EUnitaryInverseCover(T);
870
+ return CompositionMapping(InverseGeneralMapping(iso), cov);
871
+ end);
872
+
873
+ ###############################################################################
874
+ # TODO(later):
875
+ # 1) Write hash function that works when the MTSGroup is not a perm group.
876
+ # 2) Consider hash function for improvements.
877
+ # 3) Write OrderIdeal and FindOrderIrreducibleElements for digraphs package
878
+ # (order irreducible elements are the ones which generate the semilattice
879
+ # and order ideals relate to checking condition M2 from Howie).
880
+ # 4) Line break hints for printing MTSEs and McAlisterTripleSemigroups.
881
+ # 5) Implement EUnitaryInverseCover which covers with a McAlisterTriple
882
+ # 6) Improve EUnitaryInverseCover by finding smaller covers
883
+ # 7) Implement function that turns MTS over a non-perm group into one that is
884
+ # over a perm group.
885
+ # 8) Add to documentation of DigraphReverse returns a digraph where vertex i in
886
+ # the reverse is adjacent to j in the reverse when j is adjacent to i in the
887
+ # original
888
+ # 9) Consider shortening McAlisterTripleSemigroupX to McAlisterTripleX
889
+ ###############################################################################