passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_aarch64.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 (356) 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-unknown-linux-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1021 -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.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +356 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libgcc_s-2d945d6c.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-81d76771.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  354. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  355. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  356. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,711 @@
1
+ #############################################################################
2
+ ##
3
+ ## semigroups/semipperm.gi
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ # This file contains methods for every operation/attribute/property that is
12
+ # specific to semigroups of partial perms.
13
+
14
+ #############################################################################
15
+ ## Random
16
+ #############################################################################
17
+
18
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
19
+ [IsPartialPermSemigroup, IsList],
20
+ {filt, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
21
+
22
+ InstallMethod(SEMIGROUPS_ProcessRandomArgsCons,
23
+ [IsPartialPermMonoid, IsList],
24
+ {filt, params} -> SEMIGROUPS_ProcessRandomArgsCons(IsSemigroup, params));
25
+
26
+ InstallMethod(RandomSemigroupCons, "for IsPartialPermSemigroup and a list",
27
+ [IsPartialPermSemigroup, IsList], {filt, params} ->
28
+ Semigroup(List([1 .. params[1]], i -> RandomPartialPerm(params[2]))));
29
+
30
+ InstallMethod(RandomMonoidCons, "for IsPartialPermMonoid and a list",
31
+ [IsPartialPermMonoid, IsList], {filt, params} ->
32
+ Monoid(List([1 .. params[1]], i -> RandomPartialPerm(params[2]))));
33
+
34
+ InstallMethod(RandomInverseSemigroupCons,
35
+ "for IsPartialPermSemigroup and a list",
36
+ [IsPartialPermSemigroup, IsList],
37
+ function(_, params)
38
+ return InverseSemigroup(List([1 .. params[1]],
39
+ i -> RandomPartialPerm(params[2])));
40
+ end);
41
+
42
+ InstallMethod(RandomInverseMonoidCons,
43
+ "for IsPartialPermMonoid and a list",
44
+ [IsPartialPermMonoid, IsList],
45
+ function(_, params)
46
+ return InverseMonoid(List([1 .. params[1]],
47
+ i -> RandomPartialPerm(params[2])));
48
+ end);
49
+
50
+ #############################################################################
51
+ ## Operators
52
+ #############################################################################
53
+
54
+ InstallMethod(\<, "for partial perm semigroups",
55
+ [IsPartialPermSemigroup, IsPartialPermSemigroup],
56
+ function(S, T)
57
+ if DegreeOfPartialPermSemigroup(S)
58
+ <> DegreeOfPartialPermSemigroup(T)
59
+ or CodegreeOfPartialPermSemigroup(S)
60
+ <> CodegreeOfPartialPermSemigroup(T) then
61
+ return DegreeOfPartialPermSemigroup(S)
62
+ < DegreeOfPartialPermSemigroup(T) or
63
+ (DegreeOfPartialPermSemigroup(S)
64
+ = DegreeOfPartialPermSemigroup(T)
65
+ and CodegreeOfPartialPermSemigroup(S)
66
+ < CodegreeOfPartialPermSemigroup(T));
67
+ fi;
68
+ TryNextMethod();
69
+ end);
70
+
71
+ #############################################################################
72
+ ## Isomorphisms
73
+ #############################################################################
74
+
75
+ InstallMethod(IsomorphismSemigroup,
76
+ "for IsPartialPermSemigroup and a semigroup",
77
+ [IsPartialPermSemigroup, IsSemigroup],
78
+ {filt, S} -> IsomorphismPartialPermSemigroup(S));
79
+
80
+ InstallMethod(IsomorphismMonoid,
81
+ "for IsPartialPermMonoid and a semigroup",
82
+ [IsPartialPermMonoid, IsSemigroup],
83
+ {filt, S} -> IsomorphismPartialPermMonoid(S));
84
+
85
+ InstallMethod(IsomorphismPartialPermSemigroup,
86
+ "for a bipartition semigroup with generators",
87
+ [IsBipartitionSemigroup and HasGeneratorsOfSemigroup],
88
+ function(S)
89
+ local T, n;
90
+
91
+ if not ForAll(GeneratorsOfSemigroup(S), IsPartialPermBipartition) then
92
+ TryNextMethod();
93
+ fi;
94
+
95
+ T := Semigroup(List(GeneratorsOfSemigroup(S), AsPartialPerm));
96
+ UseIsomorphismRelation(S, T);
97
+ n := DegreeOfBipartitionSemigroup(S);
98
+ return SemigroupIsomorphismByFunctionNC(S,
99
+ T,
100
+ AsPartialPerm,
101
+ x -> AsBipartition(x, n));
102
+ end);
103
+
104
+ InstallMethod(IsomorphismPartialPermSemigroup,
105
+ "for bipartition inverse semigroup with generators",
106
+ [IsBipartitionSemigroup and IsInverseSemigroup and
107
+ HasGeneratorsOfInverseSemigroup],
108
+ function(S)
109
+ local T, n;
110
+
111
+ if not ForAll(GeneratorsOfInverseSemigroup(S),
112
+ IsPartialPermBipartition) then
113
+ TryNextMethod();
114
+ fi;
115
+
116
+ T := InverseSemigroup(List(GeneratorsOfInverseSemigroup(S),
117
+ AsPartialPerm));
118
+ UseIsomorphismRelation(S, T);
119
+ n := DegreeOfBipartitionSemigroup(S);
120
+
121
+ return SemigroupIsomorphismByFunctionNC(S,
122
+ T,
123
+ AsPartialPerm,
124
+ x -> AsBipartition(x, n));
125
+ end);
126
+
127
+ InstallMethod(IsomorphismPartialPermSemigroup, "for a semigroup ideal",
128
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
129
+ function(I)
130
+ local iso, inv, J;
131
+
132
+ iso := IsomorphismPartialPermSemigroup(SupersemigroupOfIdeal(I));
133
+ inv := InverseGeneralMapping(iso);
134
+ J := SemigroupIdeal(Range(iso), Images(iso, GeneratorsOfSemigroupIdeal(I)));
135
+ UseIsomorphismRelation(I, J);
136
+
137
+ return SemigroupIsomorphismByFunctionNC(I, J, x -> x ^ iso, x -> x ^ inv);
138
+ end);
139
+
140
+ InstallMethod(IsomorphismPartialPermSemigroup, "for a group as semigroup",
141
+ [IsGroupAsSemigroup],
142
+ function(G)
143
+ local perm_iso, perm_inv, perm_grp, pperm_iso, pperm_inv;
144
+
145
+ if IsPartialPermSemigroup(G) then
146
+ TryNextMethod();
147
+ fi;
148
+
149
+ perm_iso := IsomorphismPermGroup(G);
150
+ perm_inv := InverseGeneralMapping(perm_iso);
151
+ perm_grp := Range(perm_iso);
152
+ GeneratorsOfGroup(perm_grp); # to make sure that the following line calls
153
+ # the library method for IsPermGroup and
154
+ # HasGensOfGp
155
+ pperm_iso := IsomorphismPartialPermSemigroup(perm_grp);
156
+ pperm_inv := InverseGeneralMapping(pperm_iso);
157
+ return SemigroupIsomorphismByFunctionNC(G,
158
+ Range(pperm_iso),
159
+ x -> (x ^ perm_iso) ^ pperm_iso,
160
+ x -> (x ^ pperm_inv) ^ perm_inv);
161
+ end);
162
+
163
+ InstallMethod(IsomorphismPartialPermSemigroup,
164
+ "for a group with adjoined zero",
165
+ [IsMagmaWithZeroAdjoined and IsZeroGroup],
166
+ function(S)
167
+ local zero, inj_zm, inv_zm, grp, one, iso, inv, T, iso_pp, inv_pp;
168
+
169
+ zero := MultiplicativeZero(S);
170
+ inj_zm := UnderlyingInjectionZeroMagma(S);
171
+ inv_zm := InverseGeneralMapping(inj_zm);
172
+ grp := Source(inj_zm);
173
+
174
+ if IsTrivial(grp) then
175
+ # Special case: if <grp> is trivial, then `IsomorphismPartialPermSemigroup`
176
+ # will map to <{EmptyPartialPerm}>, to which we can't easily adjoin a zero.
177
+ one := MultiplicativeNeutralElement(S); # S = {zero, one}
178
+ iso := function(x)
179
+ if x = zero then
180
+ return EmptyPartialPerm();
181
+ fi;
182
+ return PartialPerm([1]);
183
+ end;
184
+ inv := function(x)
185
+ if DegreeOfPartialPerm(x) = 0 then
186
+ return zero;
187
+ fi;
188
+ return one;
189
+ end;
190
+ T := SymmetricInverseSemigroup(1);
191
+ return SemigroupIsomorphismByFunctionNC(S, T, iso, inv);
192
+ fi;
193
+
194
+ iso_pp := IsomorphismPartialPermSemigroup(grp);
195
+ inv_pp := InverseGeneralMapping(iso_pp);
196
+ T := InverseMonoid(GeneratorsOfInverseSemigroup(Range(iso_pp)),
197
+ EmptyPartialPerm());
198
+
199
+ iso := function(x)
200
+ if x = zero then
201
+ return EmptyPartialPerm();
202
+ fi;
203
+ return (x ^ inv_zm) ^ iso_pp;
204
+ end;
205
+
206
+ inv := function(x)
207
+ if DegreeOfPartialPerm(x) = 0 then
208
+ return zero;
209
+ fi;
210
+ return (x ^ inv_pp) ^ inj_zm;
211
+ end;
212
+
213
+ return SemigroupIsomorphismByFunctionNC(S, T, iso, inv);
214
+ end);
215
+
216
+ # The next method is copied directly from the GAP library the only change is
217
+ # the return value which uses SemigroupHomomorphismByFunction here but
218
+ # MagmaIsomorphismByFunctionNC in the GAP library.
219
+
220
+ InstallMethod(IsomorphismPartialPermSemigroup, "for a semigroup",
221
+ [IsSemigroup],
222
+ function(S)
223
+ local set, iso, gens, T;
224
+
225
+ if not IsInverseSemigroup(S) then
226
+ ErrorNoReturn("the argument must be an inverse semigroup");
227
+ fi;
228
+
229
+ set := AsSet(S);
230
+
231
+ iso := function(x)
232
+ local dom;
233
+ dom := Set(set * InversesOfSemigroupElement(S, x)[1]);
234
+ return PartialPermNC(List(dom, y -> Position(set, y)),
235
+ List(List(dom, y -> y * x),
236
+ y -> Position(set, y)));
237
+ end;
238
+
239
+ gens := GeneratorsOfSemigroup(S);
240
+
241
+ T := InverseSemigroup(List(gens, iso));
242
+ UseIsomorphismRelation(S, T);
243
+
244
+ return SemigroupHomomorphismByFunctionNC(S, T, iso);
245
+ end);
246
+
247
+ # The next method is copied directly from the GAP library the only change is
248
+ # the return value which uses SemigroupIsomorphismByFunctionNC here but
249
+ # MagmaIsomorphismByFunctionsNC in the GAP library.
250
+
251
+ InstallMethod(IsomorphismPartialPermSemigroup, "for a partial perm semigroup",
252
+ [IsPartialPermSemigroup],
253
+ S -> SemigroupIsomorphismByFunctionNC(S, S, IdFunc, IdFunc));
254
+
255
+ InstallMethod(SmallerDegreePartialPermRepresentation,
256
+ "for an inverse semigroup with inverse op",
257
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
258
+ function(S)
259
+ local map1, map2;
260
+ map1 := IsomorphismPartialPermSemigroup(S);
261
+ map2 := SmallerDegreePartialPermRepresentation(Range(map1));
262
+ return CompositionMapping(map2, map1);
263
+ end);
264
+
265
+ InstallMethod(SmallerDegreePartialPermRepresentation,
266
+ "for an inverse semigroup of partial permutations",
267
+ [IsInverseSemigroup and IsPartialPermSemigroup],
268
+ function(S)
269
+ local oldgens, newgens, D, e, h, lambdaorb, He, sup, trivialse, schutz,
270
+ sigmainv, enum, orbits, cosets, stabpp, psi, rho, rhoinv, stab, nrcosets, j,
271
+ reps, gen, offset, rep, box, subbox, T, map, inv, d, k, i, m;
272
+
273
+ oldgens := GeneratorsOfSemigroup(S);
274
+ newgens := List(oldgens, x -> []);
275
+ D := JoinIrreducibleDClasses(S);
276
+
277
+ for d in D do
278
+ e := RightOne(Representative(d));
279
+
280
+ # Generate representatives for all the H-Classes in the R-Class of He
281
+ h := HClassReps(GreensRClassOfElement(d, e));
282
+ lambdaorb := List(h, ImageSetOfPartialPerm);
283
+
284
+ He := GreensHClassOfElementNC(S, e);
285
+ sup := SupremumIdempotentsNC(Minorants(S, e), e);
286
+ trivialse := not ForAny(He, x -> NaturalLeqInverseSemigroup(S)(sup, x)
287
+ and x <> e);
288
+
289
+ if IsActingSemigroup(S) then
290
+ schutz := SchutzenbergerGroup(He);
291
+ sigmainv := x -> x ^ InverseGeneralMapping(IsomorphismPermGroup(He));
292
+ else
293
+ schutz := Group(());
294
+ enum := Enumerator(He);
295
+ for k in enum do
296
+ schutz := ClosureGroup(schutz, AsPermutation(k));
297
+ od;
298
+ sigmainv := x -> AsPartialPerm(x, DomainOfPartialPerm(e));
299
+ fi;
300
+
301
+ ## Se is the subgroup of He whose elements have the same minorants as e
302
+ if trivialse then
303
+ orbits := [[ActionDegree(He) + 1]];
304
+ cosets := [e];
305
+ stabpp := He;
306
+ else
307
+ psi := ActionHomomorphism(schutz,
308
+ Difference(DomainOfPartialPerm(e),
309
+ DomainOfPartialPerm(sup)));
310
+ rho := SmallerDegreePermutationRepresentation(Image(psi));
311
+ rhoinv := InverseGeneralMapping(rho);
312
+ orbits := Orbits(Image(rho));
313
+ fi;
314
+
315
+ for i in orbits do
316
+ if not trivialse then
317
+ stab := ImagesSet(InverseGeneralMapping(psi),
318
+ ImagesSet(rhoinv, Stabilizer(Image(rho), i[1])));
319
+ cosets := RightTransversal(schutz, stab);
320
+ stabpp := Set(stab, sigmainv);
321
+ fi;
322
+
323
+ # Generate representatives for ALL the cosets the generator will act on
324
+ # Divide every H-Class in the R-Class into 'cosets' like stab in He
325
+ nrcosets := Size(h) * Length(cosets);
326
+ j := 0;
327
+ reps := EmptyPlist(nrcosets);
328
+ for k in [1 .. Size(h)] do
329
+ for m in [1 .. Length(cosets)] do
330
+ j := j + 1;
331
+ reps[j] := cosets[m] * h[k];
332
+ od;
333
+ od;
334
+
335
+ # Loop over old generators of S to calculate its action on the cosets
336
+ for j in [1 .. Length(oldgens)] do
337
+ gen := oldgens[j];
338
+ offset := Length(newgens[j]);
339
+
340
+ # Loop over cosets to calculate the image of each under the generator
341
+ for k in [1 .. nrcosets] do
342
+ rep := reps[k] * gen;
343
+ # Will the new generator will be defined at this point?
344
+ if not rep * rep ^ (-1) in stabpp then
345
+ Add(newgens[j], 0);
346
+ else
347
+ box := Position(lambdaorb, ImageSetOfPartialPerm(rep));
348
+ if trivialse then
349
+ subbox := 1;
350
+ else
351
+ # instead of AsPermutation we could do ^ sigma
352
+ subbox := PositionCanonical(cosets,
353
+ AsPermutation(rep * h[box] ^ -1));
354
+ fi;
355
+ Add(newgens[j], (box - 1) * Length(cosets) + subbox + offset);
356
+ fi;
357
+ od;
358
+ od;
359
+ od;
360
+ od;
361
+ Apply(newgens, PartialPermNC);
362
+ T := InverseSemigroup(newgens);
363
+
364
+ # Return identity mapping if nothing has been accomplished; else the result.
365
+ if NrMovedPoints(T) > NrMovedPoints(S)
366
+ or (NrMovedPoints(T) = NrMovedPoints(S)
367
+ and ActionDegree(T) >= ActionDegree(S)) then
368
+ return IdentityMapping(S);
369
+ fi;
370
+
371
+ map := x -> EvaluateWord(newgens, Factorization(S, x));
372
+ inv := x -> EvaluateWord(oldgens, Factorization(T, x));
373
+
374
+ return SemigroupIsomorphismByFunctionNC(S, T, map, inv);
375
+ end);
376
+
377
+ #############################################################################
378
+ ## Algebraic attributes
379
+ #############################################################################
380
+
381
+ InstallMethod(Idempotents, "for a partial perm semigroup and pos int",
382
+ [IsPartialPermSemigroup, IsInt],
383
+ {S, rank} -> Filtered(Idempotents(S), x -> RankOfPartialPerm(x) = rank));
384
+
385
+ # this should really be in the library
386
+
387
+ InstallImmediateMethod(GeneratorsOfSemigroup,
388
+ IsPartialPermSemigroup and IsGroup and HasGeneratorsOfGroup,
389
+ 0,
390
+ function(G)
391
+ if IsEmpty(GeneratorsOfGroup(G)) then
392
+ # WW: really this should be `return [One(G)];`, but this fails when running
393
+ # GAP's `tst/testinstall.g` for some reason that I can't figure out.
394
+ TryNextMethod();
395
+ fi;
396
+ return GeneratorsOfGroup(G);
397
+ end);
398
+
399
+ # it just so happens that the MultiplicativeNeutralElement of a semigroup of
400
+ # partial permutations has to coincide with the One. This is not the case for
401
+ # transformation semigroups
402
+
403
+ # same method for ideals
404
+
405
+ InstallMethod(MultiplicativeNeutralElement, "for a partial perm semigroup",
406
+ [IsPartialPermSemigroup], One);
407
+
408
+ # same method for ideals
409
+
410
+ InstallMethod(GroupOfUnits, "for a partial perm semigroup",
411
+ [IsPartialPermSemigroup],
412
+ function(S)
413
+ local H, map, inv, G, U, iso;
414
+
415
+ if MultiplicativeNeutralElement(S) = fail then
416
+ return fail;
417
+ fi;
418
+
419
+ H := GreensHClassOfElementNC(S, MultiplicativeNeutralElement(S));
420
+ map := IsomorphismPermGroup(H);
421
+ inv := InverseGeneralMapping(map);
422
+ G := Range(map);
423
+
424
+ U := Semigroup(List(GeneratorsOfGroup(G), x -> x ^ inv));
425
+ SetIsGroupAsSemigroup(U, true);
426
+ UseIsomorphismRelation(U, G);
427
+
428
+ iso := SemigroupIsomorphismByFunctionNC(U,
429
+ G,
430
+ x -> x ^ map,
431
+ x -> x ^ inv);
432
+ SetIsomorphismPermGroup(U, iso);
433
+
434
+ return U;
435
+ end);
436
+
437
+ # the following method is required to beat the method for
438
+ # IsPartialPermCollection in the library.
439
+
440
+ InstallOtherMethod(One, "for a partial perm semigroup ideal",
441
+ [IsPartialPermSemigroup and IsSemigroupIdeal],
442
+ function(I)
443
+ local pts, x;
444
+
445
+ if HasGeneratorsOfSemigroup(I) then
446
+ x := One(GeneratorsOfSemigroup(I));
447
+ if x in I then
448
+ return x;
449
+ else
450
+ return fail;
451
+ fi;
452
+ fi;
453
+
454
+ pts := Union(ComponentsOfPartialPermSemigroup(I));
455
+ x := PartialPermNC(pts, pts);
456
+
457
+ if x in I then
458
+ return x;
459
+ fi;
460
+ return fail;
461
+ end);
462
+
463
+ InstallMethod(NaturalLeqInverseSemigroup, "for a partial perm semigroup",
464
+ [IsPartialPermSemigroup],
465
+ function(S)
466
+ if not IsInverseSemigroup(S) then
467
+ ErrorNoReturn("the argument is not an inverse semigroup");
468
+ fi;
469
+ return NaturalLeqPartialPerm;
470
+ end);
471
+
472
+ #############################################################################
473
+ ## Degree, rank
474
+ #############################################################################
475
+
476
+ InstallMethod(DegreeOfPartialPermSemigroup,
477
+ "for a partial perm semigroup ideal",
478
+ [IsPartialPermSemigroup and IsSemigroupIdeal],
479
+ function(I)
480
+ local dom;
481
+ dom := DomainOfPartialPermCollection(I);
482
+ if IsEmpty(dom) then
483
+ return 0;
484
+ fi;
485
+ return Maximum(dom);
486
+ end);
487
+
488
+ InstallMethod(CodegreeOfPartialPermSemigroup,
489
+ "for a partial perm semigroup ideal",
490
+ [IsPartialPermSemigroup and IsSemigroupIdeal],
491
+ function(I)
492
+ local im;
493
+ im := ImageOfPartialPermCollection(I);
494
+ if IsEmpty(im) then
495
+ return 0;
496
+ fi;
497
+ return Maximum(im);
498
+ end);
499
+
500
+ InstallMethod(RankOfPartialPermSemigroup,
501
+ "for a partial perm semigroup",
502
+ [IsPartialPermSemigroup], RankOfPartialPermCollection);
503
+
504
+ InstallMethod(RankOfPartialPermSemigroup,
505
+ "for a partial perm semigroup ideal",
506
+ [IsPartialPermSemigroup and IsSemigroupIdeal],
507
+ I -> Length(DomainOfPartialPermCollection(I)));
508
+
509
+ #############################################################################
510
+ ## Domain, image
511
+ #############################################################################
512
+
513
+ BindGlobal("_DomainImageOfPartialPermIdeal",
514
+ function(I, DomainOrImage, InversesOrGenerators)
515
+ local O, S, hash, val, x, y;
516
+
517
+ O := DomainOrImage(GeneratorsOfSemigroupIdeal(I));
518
+ S := SupersemigroupOfIdeal(I);
519
+ if O = DomainOrImage(S) then
520
+ return O;
521
+ fi;
522
+ O := ShallowCopy(O);
523
+ hash := HashSet();
524
+ for x in O do
525
+ for y in InversesOrGenerators do
526
+ val := x ^ y;
527
+ if val <> 0 and not val in hash then
528
+ Add(O, val);
529
+ AddSet(hash, val);
530
+ fi;
531
+ od;
532
+ od;
533
+ return Set(O);
534
+ end);
535
+
536
+ InstallMethod(ImageOfPartialPermCollection,
537
+ "for a partial perm semigroup ideal",
538
+ [IsPartialPermSemigroup and IsSemigroupIdeal],
539
+ function(I)
540
+ local S;
541
+ S := SupersemigroupOfIdeal(I);
542
+ return _DomainImageOfPartialPermIdeal(I,
543
+ ImageOfPartialPermCollection,
544
+ GeneratorsOfSemigroup(S));
545
+ end);
546
+
547
+ InstallMethod(DomainOfPartialPermCollection,
548
+ "for a partial perm semigroup ideal",
549
+ [IsPartialPermSemigroup and IsSemigroupIdeal],
550
+ function(I)
551
+ local S;
552
+ S := SupersemigroupOfIdeal(I);
553
+ return _DomainImageOfPartialPermIdeal(I,
554
+ DomainOfPartialPermCollection,
555
+ List(GeneratorsOfSemigroup(S),
556
+ InverseOp));
557
+ end);
558
+
559
+ #############################################################################
560
+ ## Action on points
561
+ #############################################################################
562
+
563
+ InstallMethod(FixedPointsOfPartialPermSemigroup,
564
+ "for a partial perm semigroup with generators",
565
+ [IsPartialPermSemigroup and HasGeneratorsOfSemigroup],
566
+ function(S)
567
+ local n, gens;
568
+ n := DegreeOfPartialPermSemigroup(S);
569
+ gens := GeneratorsOfSemigroup(S);
570
+ return Filtered([1 .. n], i -> ForAll(gens, x -> i ^ x = i));
571
+ end);
572
+
573
+ InstallMethod(FixedPointsOfPartialPermSemigroup,
574
+ "for a partial perm semigroup ideal",
575
+ [IsPartialPermSemigroup and IsSemigroupIdeal],
576
+ function(I)
577
+ local S, F;
578
+
579
+ S := SupersemigroupOfIdeal(I);
580
+ F := FixedPointsOfPartialPermSemigroup(S);
581
+ return Intersection(F, DomainOfPartialPermCollection(I));
582
+ end);
583
+
584
+ InstallMethod(DigraphOfActionOnPoints, "for a partial perm semigroup",
585
+ [IsPartialPermSemigroup],
586
+ S -> DigraphOfActionOnPoints(S, Maximum(DegreeOfPartialPermSemigroup(S),
587
+ CodegreeOfPartialPermSemigroup(S))));
588
+
589
+ InstallMethod(DigraphOfActionOnPoints, "for a partial perm semigroup",
590
+ [IsPartialPermSemigroup, IsInt],
591
+ function(S, n)
592
+ local gens, out, range, i, x;
593
+
594
+ if n < 0 then
595
+ ErrorNoReturn("the 2nd argument (an integer) must be non-negative");
596
+ elif n = 0 then
597
+ return EmptyDigraph(0);
598
+ elif HasDigraphOfActionOnPoints(S)
599
+ and n = Maximum(DegreeOfPartialPermSemigroup(S),
600
+ CodegreeOfPartialPermSemigroup(S)) then
601
+ return DigraphOfActionOnPoints(S);
602
+ elif IsSemigroupIdeal(S) then
603
+ gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(S));
604
+ else
605
+ gens := GeneratorsOfSemigroup(S);
606
+ fi;
607
+
608
+ out := List([1 .. n], x -> []);
609
+ for i in [1 .. n] do
610
+ for x in gens do
611
+ range := i ^ x;
612
+ if range <= n and range > 0 then
613
+ Add(out[i], range);
614
+ fi;
615
+ od;
616
+ od;
617
+ return DigraphNC(out);
618
+ end);
619
+
620
+ InstallMethod(ComponentRepresentatives,
621
+ "for a partial perm or transf semigroup", [IsSemigroup],
622
+ function(S)
623
+ local D, C;
624
+ if not (IsPartialPermSemigroup(S) or IsTransformationSemigroup(S)) then
625
+ TryNextMethod();
626
+ fi;
627
+ D := DigraphMutableCopy(DigraphOfActionOnPoints(S));
628
+ C := DigraphStronglyConnectedComponents(D).comps;
629
+ DigraphRemoveLoops(QuotientDigraph(D, C));
630
+ return List(DigraphSources(D), x -> DigraphVertexLabel(D, x)[1]);
631
+ end);
632
+
633
+ InstallMethod(ComponentRepsOfPartialPermSemigroup,
634
+ "for a partial perm semigroup", [IsPartialPermSemigroup],
635
+ ComponentRepresentatives);
636
+
637
+ InstallMethod(ComponentsOfPartialPermSemigroup,
638
+ "for a partial perm semigroup", [IsPartialPermSemigroup],
639
+ S -> DigraphConnectedComponents(DigraphOfActionOnPoints(S)).comps);
640
+
641
+ InstallMethod(CyclesOfPartialPermSemigroup,
642
+ "for a partial perm semigroup", [IsPartialPermSemigroup],
643
+ function(S)
644
+ local D, C, F;
645
+ D := DigraphOfActionOnPoints(S);
646
+ C := DigraphStronglyConnectedComponents(D).comps;
647
+ C := Filtered(C, x -> Size(x) > 1);
648
+ F := FixedPointsOfPartialPermSemigroup(S);
649
+ Append(C, List(F, x -> [x]));
650
+ return C;
651
+ end);
652
+
653
+ InstallMethod(RepresentativeOfMinimalIdealNC,
654
+ "for a partial perm semigroup with generators",
655
+ [IsPartialPermSemigroup and HasGeneratorsOfSemigroup], 1,
656
+ function(S)
657
+ local D, N, stack, Q, M, seen, good, labels, next, result, root, x;
658
+
659
+ D := DigraphOfActionOnPoints(S);
660
+ N := Length(GeneratorsOfSemigroup(S));
661
+
662
+ # A point occurs in the domain/image of a partial perm in the minimal ideal
663
+ # if and only if no node in D reachable from that point has degree < N.
664
+ # We perform a simple DFS to find such nodes.
665
+ stack := Stack();
666
+
667
+ Q := QuotientDigraph(D, DigraphStronglyConnectedComponents(D).comps);
668
+ M := DigraphNrVertices(Q);
669
+ seen := BlistList([1 .. M], []);
670
+ good := BlistList([1 .. M], [1 .. M]);
671
+ labels := DigraphVertexLabels(Q);
672
+
673
+ for root in [1 .. M] do
674
+ if not seen[root] then
675
+ Push(stack, root);
676
+ while Size(stack) > 0 do
677
+ next := Pop(stack);
678
+ if next < 0 then
679
+ # Postorder: all neighbours of -next already processed
680
+ next := -next;
681
+ if good[next]
682
+ and ForAny(OutNeighboursOfVertex(Q, next), x -> not good[x]) then
683
+ good[next] := false;
684
+ fi;
685
+ elif not seen[next] then
686
+ seen[next] := true;
687
+ if good[next]
688
+ and ForAny(labels[next],
689
+ x -> Length(OutNeighboursOfVertex(D, x)) < N) then
690
+ good[next] := false;
691
+ fi;
692
+ # To mark the starting point of the neighbours of next in stack
693
+ Push(stack, -next);
694
+ for x in OutNeighboursOfVertex(Q, next) do
695
+ Push(stack, x);
696
+ od;
697
+ fi;
698
+ od;
699
+ fi;
700
+ od;
701
+
702
+ result := [];
703
+ for x in [1 .. M] do
704
+ if good[x] then
705
+ UniteSet(result, labels[x]);
706
+ fi;
707
+ od;
708
+
709
+ # Minimal ideal contains an idempotent!
710
+ return PartialPermNC(result, result);
711
+ end);