passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_x86_64.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/x86_64-pc-linux-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1068 -0
  17. gap/pkg/semigroups/config.status +1133 -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-0cd532bd.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-f0b7066b.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-5d72f927.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,708 @@
1
+ #############################################################################
2
+ ##
3
+ ## attributes/inverse.gi
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ## Wilf A. Wilson
6
+ ## Rhiannon Dougall
7
+ ## Robert Hancock
8
+ ##
9
+ ## Licensing information can be found in the README file of this package.
10
+ ##
11
+ #############################################################################
12
+ ##
13
+
14
+ InstallMethod(IdempotentGeneratedSubsemigroup,
15
+ "for an inverse semigroup with inverse op",
16
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
17
+ function(S)
18
+ local out;
19
+ if not IsFinite(S) then
20
+ TryNextMethod();
21
+ fi;
22
+ # Use acting := false since the output of this is a semilattice which is
23
+ # J-trivial and hence it is better to use the Froidure-Pin Algorithm
24
+ out := InverseSemigroup(Idempotents(S), rec(small := true, acting := false));
25
+ SetIsSemilattice(out, true);
26
+ return out;
27
+ end);
28
+
29
+ # fall back method
30
+
31
+ InstallMethod(NaturalPartialOrder, "for a semigroup",
32
+ [IsSemigroup],
33
+ function(S)
34
+ local elts, p, func, out, i, j;
35
+
36
+ if not IsFinite(S) then
37
+ ErrorNoReturn("the argument (a semigroup) is not finite");
38
+ elif not IsInverseSemigroup(S) then
39
+ ErrorNoReturn("the argument (a semigroup) is not an inverse semigroup");
40
+ fi;
41
+
42
+ Info(InfoWarning, 2, "NaturalPartialOrder: this method ",
43
+ "fully enumerates its argument!");
44
+
45
+ elts := ShallowCopy(Elements(S));
46
+ p := Sortex(elts, {x, y} -> IsGreensDGreaterThanFunc(S)(y, x)) ^ -1;
47
+ func := NaturalLeqInverseSemigroup(S);
48
+ out := List([1 .. Size(S)], x -> []);
49
+
50
+ # <elts> is sorted so that D_elts[i] < D_elts[j] => i < j.
51
+ # Thus NaturalLeqInverseSemigroup(S)(i, j) => i <= j.
52
+
53
+ for i in [1 .. Size(S)] do
54
+ for j in [i + 1 .. Size(S)] do
55
+ if func(elts[i], elts[j]) then
56
+ AddSet(out[j ^ p], i ^ p);
57
+ fi;
58
+ od;
59
+ od;
60
+ return out;
61
+ end);
62
+
63
+ # fall back method
64
+
65
+ InstallMethod(NaturalLeqInverseSemigroup, "for a semigroup",
66
+ [IsSemigroup],
67
+ function(S)
68
+
69
+ if not IsFinite(S) then
70
+ ErrorNoReturn("the argument (a semigroup) is not finite");
71
+ elif not IsInverseSemigroup(S) then
72
+ ErrorNoReturn("the argument (a semigroup) is not an inverse semigroup");
73
+ fi;
74
+
75
+ return
76
+ function(x, y)
77
+ local z;
78
+ z := InversesOfSemigroupElement(S, x)[1];
79
+ return x * z = y * z;
80
+ end;
81
+ end);
82
+
83
+ # same method for ideals
84
+
85
+ InstallMethod(CharacterTableOfInverseSemigroup,
86
+ "for an inverse semigroup of partial permutations",
87
+ [IsInverseSemigroup and IsPartialPermSemigroup and IsActingSemigroup],
88
+ function(S)
89
+ local reps, p, H, C, r, tbl, id, l, A, o, lookup, conjclass, conjlens,
90
+ j, conjreps, dom, subsets, x, m, u, k, h, i, n, y;
91
+
92
+ reps := ShallowCopy(DClassReps(S));
93
+ p := Sortex(reps, function(x, y)
94
+ return RankOfPartialPerm(x) > RankOfPartialPerm(y)
95
+ or (RankOfPartialPerm(x) = RankOfPartialPerm(y)
96
+ and x > y);
97
+ end);
98
+
99
+ H := List(reps, e -> SchutzenbergerGroup(HClass(S, e)));
100
+ C := []; # The group character matrices
101
+ r := 0;
102
+
103
+ # The block diagonal matrix of group character matrices
104
+ for h in H do
105
+ tbl := CharacterTable(h);
106
+ id := IdentificationOfConjugacyClasses(tbl);
107
+ tbl := Irr(tbl);
108
+ l := Length(id);
109
+ for i in [1 + r .. l + r] do
110
+ C[i] := [];
111
+ for j in [1 .. r] do
112
+ C[i][j] := 0;
113
+ C[j][i] := 0;
114
+ od;
115
+
116
+ for j in [1 + r .. l + r] do
117
+ C[i][j] := tbl[i - r][Position(id, j - r)];
118
+ od;
119
+ od;
120
+ r := r + l;
121
+ od;
122
+
123
+ A := List([1 .. r], x -> [1 .. r] * 0);
124
+ o := LambdaOrb(S);
125
+ lookup := OrbSCCLookup(o);
126
+
127
+ conjclass := [ConjugacyClasses(H[1])];
128
+ conjlens := [0];
129
+
130
+ for i in [2 .. Length(H)] do
131
+ Add(conjclass, ConjugacyClasses(H[i]));
132
+ conjlens[i] := conjlens[i - 1] + Length(conjclass[i - 1]);
133
+ od;
134
+
135
+ j := 0;
136
+ conjreps := [];
137
+ for i in [1 .. Length(H)] do
138
+ dom := DomainOfPartialPerm(reps[i]);
139
+ subsets := Filtered(o, x -> IsSubset(dom, x));
140
+ for n in [1 .. Length(conjclass[i])] do
141
+ j := j + 1;
142
+ conjreps[n + conjlens[i]] :=
143
+ AsPartialPerm(Representative(conjclass[i][n]), dom);
144
+ for y in subsets do
145
+ x := RestrictedPartialPerm(conjreps[n + conjlens[i]], y);
146
+ if y = ImageSetOfPartialPerm(x) then
147
+ l := Position(o, y);
148
+ m := lookup[l];
149
+ u := LambdaOrbMult(o, m, l);
150
+ x := AsPermutation(u[1] * x * u[2]);
151
+ m := (m - 1) ^ p;
152
+ k := PositionProperty(conjclass[m], class -> x in class)
153
+ + conjlens[m];
154
+ A[k][j] := A[k][j] + 1;
155
+ fi;
156
+ od;
157
+ od;
158
+ od;
159
+ return [C * A, conjreps];
160
+ end);
161
+
162
+ # same method for ideals
163
+
164
+ InstallMethod(IsGreensDGreaterThanFunc, "for an inverse acting semigroup rep",
165
+ [IsInverseActingSemigroupRep],
166
+ function(S)
167
+ local D, o;
168
+
169
+ D := PartialOrderOfDClasses(S);
170
+ o := LambdaOrb(S);
171
+
172
+ return function(x, y)
173
+ local u, v;
174
+ if x = y then
175
+ return false;
176
+ fi;
177
+ u := OrbSCCLookup(o)[Position(o, LambdaFunc(S)(x))] - 1;
178
+ v := OrbSCCLookup(o)[Position(o, LambdaFunc(S)(y))] - 1;
179
+ return u <> v and IsReachable(D, u, v);
180
+ end;
181
+ end);
182
+
183
+ # same method for ideals
184
+
185
+ InstallMethod(PrimitiveIdempotents, "for a semigroup",
186
+ [IsSemigroup],
187
+ function(S)
188
+ local T, i, gr, prims;
189
+
190
+ if not IsFinite(S) then
191
+ ErrorNoReturn("the argument (a semigroup) is not finite");
192
+ elif not IsInverseSemigroup(S) then
193
+ ErrorNoReturn("the argument (a semigroup) is not an inverse semigroup");
194
+ elif MultiplicativeZero(S) = fail then
195
+ return Idempotents(MinimalIdeal(S));
196
+ fi;
197
+
198
+ T := IdempotentGeneratedSubsemigroup(S);
199
+ i := Position(Elements(T), MultiplicativeZero(S));
200
+ # TODO(later): NaturalPartialOrder should return a Digraph but
201
+ # NaturalPartialOrder is declared in GAP library, and so we can't.
202
+ gr := DigraphReflexiveTransitiveReduction(Digraph(NaturalPartialOrder(T)));
203
+ prims := InNeighboursOfVertex(gr, i);
204
+ return EnumeratorSorted(T){prims};
205
+ end);
206
+
207
+ InstallMethod(PrimitiveIdempotents, "for acting inverse semigroup rep",
208
+ [IsInverseActingSemigroupRep],
209
+ function(s)
210
+ local o, scc, rank, min, l, min2, m;
211
+
212
+ o := LambdaOrb(s);
213
+ scc := OrbSCC(o);
214
+ rank := LambdaRank(s);
215
+ min := ActionDegree(s);
216
+
217
+ if MultiplicativeZero(s) = fail then
218
+ for m in [2 .. Length(scc)] do
219
+ l := rank(o[scc[m][1]]);
220
+ if l < min then
221
+ min := l;
222
+ fi;
223
+ od;
224
+ return Idempotents(s, min);
225
+ fi;
226
+
227
+ # s has a multiplicative zero
228
+ for m in [2 .. Length(scc)] do
229
+ l := rank(o[scc[m][1]]);
230
+ if l < min then
231
+ min2 := min;
232
+ min := l;
233
+ fi;
234
+ od;
235
+ return Idempotents(s, min2);
236
+ end);
237
+
238
+ # same method for ideals
239
+ # TODO(later) a non-inverse-op version of this
240
+
241
+ InstallMethod(IsJoinIrreducible,
242
+ "for inverse semigroup with inverse op and a multiplicative element",
243
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
244
+ IsMultiplicativeElement],
245
+ function(S, x)
246
+ local elts, leq, y, i, k, j, sup;
247
+
248
+ if not x in S then
249
+ ErrorNoReturn("the 2nd argument (a mult. elt.) does not belong to ",
250
+ "the 1st argument (an inverse semigroup)");
251
+ fi;
252
+
253
+ if IsMultiplicativeZero(S, x) then
254
+ return false;
255
+ fi;
256
+
257
+ elts := ShallowCopy(Idempotents(S));
258
+ SortBy(elts, ActionRank(S));
259
+ leq := NaturalLeqInverseSemigroup(S);
260
+
261
+ y := LeftOne(x);
262
+ i := Position(elts, y);
263
+
264
+ # Find an element smaller than y, k
265
+ k := First([i - 1, i - 2 .. 1], j -> leq(elts[j], elts[i]));
266
+
267
+ # If there is no smaller element k: true
268
+ if k = fail then
269
+ return true;
270
+ fi;
271
+
272
+ # Look for other elements smaller than y which are not smaller than k
273
+ j := First([1 .. k - 1], j -> leq(elts[j], elts[i])
274
+ and not leq(elts[j], elts[k]));
275
+
276
+ if j = fail then
277
+ return true;
278
+ elif Size(HClassNC(S, y)) = 1 then
279
+ return false;
280
+ fi;
281
+
282
+ sup := SupremumIdempotentsNC(Minorants(S, y), x);
283
+
284
+ return y <> sup and ForAny(HClassNC(S, y), x -> leq(sup, x) and x <> y);
285
+ end);
286
+
287
+ # same method for ideals
288
+
289
+ InstallMethod(IsMajorantlyClosed,
290
+ "for inverse semigroup with inverse op and inverse semigroup with inverse op",
291
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
292
+ IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
293
+ function(S, T)
294
+ if not IsSubsemigroup(S, T) then
295
+ ErrorNoReturn("the 2nd argument (an inverse semigroup) is not a",
296
+ " subsemigroup of the 1st argument (an inverse semigroup)");
297
+ fi;
298
+ return IsMajorantlyClosedNC(S, Elements(T));
299
+ end);
300
+
301
+ # same method for ideals
302
+
303
+ InstallMethod(IsMajorantlyClosed,
304
+ "for an inverse semigroup with inverse op and mult. element collection",
305
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
306
+ IsMultiplicativeElementCollection],
307
+ function(S, T)
308
+ if not IsSubset(S, T) then
309
+ ErrorNoReturn("the 2nd argument (a mult. elt. coll) is not a ",
310
+ "subset of the 1st argument (an inverse semigroup)");
311
+ fi;
312
+ return IsMajorantlyClosedNC(S, T);
313
+ end);
314
+
315
+ # same method for ideals
316
+
317
+ InstallMethod(IsMajorantlyClosedNC,
318
+ "for an inverse semigroup with inverse op and mult. element collection",
319
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
320
+ IsMultiplicativeElementCollection],
321
+ function(S, T)
322
+ local leq, t, iter, u;
323
+
324
+ if Size(S) = Size(T) then
325
+ return true;
326
+ fi;
327
+
328
+ leq := NaturalLeqInverseSemigroup(S);
329
+ for t in T do
330
+ iter := Iterator(S);
331
+ for u in iter do
332
+ if leq(t, u) and not u in T then
333
+ return false;
334
+ fi;
335
+ od;
336
+ od;
337
+ return true;
338
+ end);
339
+
340
+ # same method for ideals
341
+
342
+ InstallMethod(JoinIrreducibleDClasses,
343
+ "for an inverse semigroup of partial permutations",
344
+ [IsInverseSemigroup and IsPartialPermSemigroup],
345
+ function(S)
346
+ local D, elts, out, seen_zero, rep, i, leq, k, minorants, singleline, h, mov,
347
+ d, j, p;
348
+
349
+ D := GreensDClasses(S);
350
+ elts := Set(Idempotents(S));
351
+ out := EmptyPlist(Length(D));
352
+ seen_zero := false;
353
+
354
+ for d in D do
355
+ rep := LeftOne(Representative(d));
356
+
357
+ if not seen_zero and IsMultiplicativeZero(S, rep) then
358
+ seen_zero := true;
359
+ continue;
360
+ fi;
361
+
362
+ i := Position(elts, rep);
363
+ leq := NaturalLeqInverseSemigroup(S);
364
+ k := First([i - 1, i - 2 .. 1], j -> leq(elts[j], rep));
365
+
366
+ if k = fail then # d is the minimal non-trivial D-class
367
+ # WW what do I mean by 'non-trivial' here?
368
+ Add(out, d);
369
+ continue;
370
+ fi;
371
+
372
+ minorants := [k];
373
+ singleline := true;
374
+
375
+ if IsActingSemigroup(S) then
376
+ h := SchutzenbergerGroup(d);
377
+ else
378
+ h := GroupHClass(d);
379
+ fi;
380
+
381
+ for j in [1 .. k - 1] do
382
+ if leq(elts[j], rep) then
383
+ if singleline and not leq(elts[j], elts[k]) then
384
+ # rep is the lub of {elts[j], elts[k]}, not quite
385
+ singleline := false;
386
+ if IsTrivial(h) then
387
+ break;
388
+ fi;
389
+ else
390
+ Add(minorants, j);
391
+ fi;
392
+ fi;
393
+ od;
394
+
395
+ if singleline then
396
+ Add(out, d);
397
+ continue;
398
+ elif IsTrivial(h) then
399
+ continue;
400
+ fi;
401
+
402
+ minorants := Union(List(minorants, j -> DomainOfPartialPerm(elts[j])));
403
+
404
+ if DomainOfPartialPerm(rep) = minorants then
405
+ # rep=lub(minorants) but rep not in minorants
406
+ continue;
407
+ fi;
408
+
409
+ for p in h do
410
+ mov := MovedPoints(p);
411
+ if not IsEmpty(mov) and ForAll(mov, x -> not x in minorants) then
412
+ # rep * p <> rep and rep, rep * p > lub(minorants) and rep || rep * p
413
+ # and hence neither rep * p nor rep is of any set.
414
+ Add(out, d);
415
+ break;
416
+ fi;
417
+ od;
418
+ od;
419
+
420
+ return out;
421
+ end);
422
+
423
+ # same method for ideals
424
+
425
+ InstallMethod(JoinIrreducibleDClasses,
426
+ "for inverse semigroup with inverse op",
427
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
428
+ function(S)
429
+ return Filtered(GreensDClasses(S),
430
+ x -> IsJoinIrreducible(S, Representative(x)));
431
+ end);
432
+
433
+ # same method for ideals
434
+
435
+ InstallMethod(MajorantClosure,
436
+ "for inverse semigroup with inverse op and semigroup",
437
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup, IsSemigroup],
438
+ function(S, T)
439
+ if not IsSubsemigroup(S, T) then
440
+ ErrorNoReturn("the 2nd argument (a semigroup) is not a subset ",
441
+ "of the 1st argument (an inverse semigroup)");
442
+ fi;
443
+ return MajorantClosureNC(S, Elements(T));
444
+ end);
445
+
446
+ # same method for ideals
447
+
448
+ InstallMethod(MajorantClosure,
449
+ "for an inverse semigroup with inverse op and mult. element collection",
450
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
451
+ IsMultiplicativeElementCollection],
452
+ function(S, T)
453
+ if not IsSubset(S, T) then
454
+ ErrorNoReturn("the 2nd argument (a mult. elt. coll.) is not a subset",
455
+ " of the 1st argument (an inverse semigroup)");
456
+ fi;
457
+ return MajorantClosureNC(S, T);
458
+ end);
459
+
460
+ # same method for ideals
461
+
462
+ InstallMethod(MajorantClosureNC,
463
+ "for an inverse semigroup with inverse op and mult. element collection",
464
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
465
+ IsMultiplicativeElementCollection],
466
+ function(S, T)
467
+ local elts, n, out, ht, k, leq, val, t, i;
468
+
469
+ elts := Elements(S);
470
+ n := Length(elts);
471
+ out := EmptyPlist(n);
472
+ ht := HTCreate(T[1]);
473
+ k := 0;
474
+
475
+ for t in T do
476
+ HTAdd(ht, t, true);
477
+ Add(out, t);
478
+ k := k + 1;
479
+ od;
480
+ leq := NaturalLeqInverseSemigroup(S);
481
+ for t in out do
482
+ for i in [1 .. n] do
483
+ if leq(t, elts[i]) then
484
+ val := HTValue(ht, elts[i]);
485
+ if val = fail then
486
+ k := k + 1;
487
+ Add(out, elts[i]);
488
+ HTAdd(ht, elts[i], true);
489
+ if k = Size(S) then
490
+ return out;
491
+ fi;
492
+ fi;
493
+ fi;
494
+ od;
495
+ od;
496
+ return out;
497
+ end);
498
+
499
+ # same method for ideals
500
+
501
+ InstallMethod(Minorants,
502
+ "for an inverse semigroup and multiplicative element",
503
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
504
+ IsMultiplicativeElement],
505
+ function(S, f)
506
+ local elts, i, out, rank, j, leq, k;
507
+
508
+ if not f in S then
509
+ ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element of ",
510
+ "the 1st argument (an inverse semigroup)");
511
+ fi;
512
+
513
+ if HasNaturalPartialOrder(S) then
514
+ elts := Elements(S);
515
+ i := Position(elts, f);
516
+ return elts{NaturalPartialOrder(S)[i]};
517
+ fi;
518
+
519
+ # Always true if S is a D-class rep of an inverse sgp
520
+ if IsIdempotent(f) then
521
+ out := EmptyPlist(NrIdempotents(S));
522
+ elts := ShallowCopy(Idempotents(S));
523
+ else
524
+ out := EmptyPlist(Size(S));
525
+ elts := ShallowCopy(Elements(S));
526
+ fi;
527
+
528
+ # Minorants always have lesser rank.
529
+ # If we sort the elts by rank then we can cut down our search space
530
+ if IsActingSemigroup(S) then
531
+ rank := ActionRank(S);
532
+ SortBy(elts, rank);
533
+ else
534
+ rank := {x, y} -> IsGreensDGreaterThanFunc(S)(y, x);
535
+ Sort(elts, rank);
536
+ fi;
537
+
538
+ i := Position(elts, f);
539
+ j := 0;
540
+ leq := NaturalLeqInverseSemigroup(S);
541
+ for k in [1 .. i - 1] do
542
+ if leq(elts[k], f) and f <> elts[k] then
543
+ j := j + 1;
544
+ out[j] := elts[k];
545
+ fi;
546
+ od;
547
+ ShrinkAllocationPlist(out);
548
+ return out;
549
+ end);
550
+
551
+ # same method for ideals
552
+ # TODO(later): rename this RightCosets
553
+
554
+ InstallMethod(RightCosetsOfInverseSemigroup,
555
+ "for inverse semigroup and inverse semigroup",
556
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
557
+ IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
558
+ function(S, T)
559
+ local elts, min, usedreps, out, coset, s, t;
560
+
561
+ if not IsSubsemigroup(S, T) then
562
+ ErrorNoReturn("the 2nd argument (an inverse semigroup) must be ",
563
+ "a subsemigroup of the 1st argument (an inverse ",
564
+ "semigroup)");
565
+ fi;
566
+
567
+ elts := Elements(T);
568
+
569
+ if not IsMajorantlyClosedNC(S, elts) then
570
+ ErrorNoReturn("the 2nd argument (an inverse semigroup) must be ",
571
+ "majorantly closed");
572
+ fi;
573
+
574
+ min := RepresentativeOfMinimalIdeal(T);
575
+ usedreps := [];
576
+ out := [];
577
+
578
+ for s in RClass(S, min) do
579
+
580
+ # Check if Ts is a duplicate coset
581
+ if not ForAny(usedreps, x -> s * x ^ -1 in elts) then
582
+ Add(usedreps, s);
583
+
584
+ coset := [];
585
+ for t in elts do
586
+ Add(coset, t * s);
587
+ od;
588
+ coset := Set(coset);
589
+
590
+ # Generate the majorant closure of Ts to create the coset
591
+
592
+ coset := MajorantClosureNC(S, coset);
593
+ Add(out, coset);
594
+ fi;
595
+ od;
596
+
597
+ return out;
598
+ end);
599
+
600
+ # same method for ideals
601
+
602
+ InstallMethod(SameMinorantsSubgroup,
603
+ "for a group H-class of an inverse semigroup with inverse op",
604
+ [IsGroupHClass],
605
+ function(H)
606
+ local S, e, F, out, x, leq;
607
+
608
+ S := Parent(H);
609
+
610
+ if not IsGeneratorsOfInverseSemigroup(S) then
611
+ ErrorNoReturn("the parent of the argument (a group H-class)",
612
+ " must be an inverse semigroup");
613
+ fi;
614
+
615
+ e := Representative(H);
616
+ F := Minorants(S, e);
617
+ out := [];
618
+ leq := NaturalLeqInverseSemigroup(S);
619
+ for x in H do
620
+ if x = e or ForAll(F, f -> leq(f, x)) then
621
+ Add(out, x);
622
+ fi;
623
+ od;
624
+ return out;
625
+ end);
626
+
627
+ InstallGlobalFunction(SupremumIdempotentsNC,
628
+ function(coll, x)
629
+ local dom, i, part, rep, reps, out, todo, inter;
630
+
631
+ if IsPartialPerm(x) then
632
+
633
+ if IsList(coll) and IsEmpty(coll) then
634
+ return PartialPerm([]);
635
+ fi;
636
+ dom := DomainOfPartialPermCollection(coll);
637
+ return PartialPerm(dom, dom);
638
+
639
+ elif IsBipartition(x) and IsBlockBijection(x) then
640
+
641
+ if IsList(coll) and IsEmpty(coll) then
642
+ return Bipartition([Concatenation([1 .. DegreeOfBipartition(x)],
643
+ -[1 .. DegreeOfBipartition(x)])]);
644
+ fi;
645
+
646
+ reps := List(coll, ExtRepOfObj);
647
+ todo := [1 .. DegreeOfBipartition(x)];
648
+ out := [];
649
+ for i in todo do
650
+ inter := [];
651
+ for rep in reps do
652
+ for part in rep do
653
+ if i in part then
654
+ Add(inter, part);
655
+ break;
656
+ fi;
657
+ od;
658
+ od;
659
+ inter := Intersection(inter);
660
+ AddSet(out, inter);
661
+ todo := Difference(todo, inter);
662
+ od;
663
+ return Bipartition(out);
664
+
665
+ elif IsBipartition(x) and IsPartialPermBipartition(x) then
666
+ # TODO(later) shouldn't there be a check here like above?
667
+ return AsBipartition(SupremumIdempotentsNC(
668
+ List(coll, AsPartialPerm), PartialPerm([])),
669
+ DegreeOfBipartition(x));
670
+ fi;
671
+ ErrorNoReturn("the argument is not a collection of partial perms, block ",
672
+ "bijections, or partial perm bipartitions");
673
+ end);
674
+
675
+ # same method for ideals
676
+
677
+ InstallMethod(VagnerPrestonRepresentation,
678
+ "for an inverse semigroup with inverse op",
679
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
680
+ function(S)
681
+ local gens, elts, out, iso, T, inv, i;
682
+
683
+ gens := GeneratorsOfSemigroup(S);
684
+ elts := Elements(S);
685
+ out := EmptyPlist(Length(gens));
686
+
687
+ iso := function(x)
688
+ local dom;
689
+ dom := Set(elts * (x ^ -1));
690
+ return PartialPerm(List(dom, y -> Position(elts, y)),
691
+ List(List(dom, y -> y * x), y -> Position(elts, y)));
692
+ end;
693
+
694
+ for i in [1 .. Length(gens)] do
695
+ out[i] := iso(gens[i]);
696
+ od;
697
+
698
+ T := InverseSemigroup(out);
699
+ inv := x -> EvaluateWord(GeneratorsOfSemigroup(S), Factorization(T, x));
700
+
701
+ return SemigroupIsomorphismByFunctionNC(S, T, iso, inv);
702
+ end);
703
+
704
+ InstallMethod(InversesOfSemigroupElementNC,
705
+ "for an inverse semigroup and a multiplicative element",
706
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup,
707
+ IsMultiplicativeElement], SUM_FLAGS,
708
+ {_, elm} -> [elm ^ -1]);
@@ -0,0 +1,16 @@
1
+ #############################################################################
2
+ ##
3
+ ## attributes/isomorph.gd
4
+ ## Copyright (C) 2014-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ DeclareOperation("IsomorphismSemigroups", [IsSemigroup, IsSemigroup]);
12
+ DeclareAttribute("SmallestMultiplicationTable", IsSemigroup);
13
+ DeclareAttribute("CanonicalMultiplicationTable", IsSemigroup);
14
+ DeclareAttribute("CanonicalMultiplicationTablePerm", IsSemigroup);
15
+ DeclareOperation("OnMultiplicationTable", [IsRectangularTable, IsPerm]);
16
+ DeclareOperation("IsIsomorphicSemigroup", [IsSemigroup, IsSemigroup]);