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,655 @@
1
+ ###########################################################################
2
+ ##
3
+ ## main/froidure-pin.gi
4
+ ## Copyright (C) 2015-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ # This file contains methods for accessing the kernel level version of the
12
+ # Froidure-Pin algorithm for enumerating arbitrary semigroups.
13
+
14
+ # For some details see:
15
+ #
16
+ # V. Froidure, and J.-E. Pin, Algorithms for computing finite semigroups.
17
+ # Foundations of computational mathematics (Rio de Janeiro, 1997), 112-126,
18
+ # Springer, Berlin, 1997.
19
+
20
+ InstallMethod(CanUseFroidurePin, "for a semigroup",
21
+ [IsSemigroup], S -> CanUseGapFroidurePin(S) or
22
+ CanUseLibsemigroupsFroidurePin(S));
23
+
24
+ InstallMethod(HasFroidurePin, "for a semigroup",
25
+ [IsSemigroup], S -> HasGapFroidurePin(S) or
26
+ HasLibsemigroupsFroidurePin(S));
27
+
28
+ InstallTrueMethod(CanUseFroidurePin, CanUseGapFroidurePin);
29
+
30
+ for x in [IsMatrixOverFiniteFieldSemigroup,
31
+ IsGraphInverseSubsemigroup,
32
+ IsMcAlisterTripleSubsemigroup,
33
+ IsSemigroup and IsFreeBandElementCollection,
34
+ IsPermGroup,
35
+ IsFreeInverseSemigroupCategory] do
36
+ InstallTrueMethod(CanUseGapFroidurePin, x);
37
+ od;
38
+ Unbind(x);
39
+
40
+ InstallMethod(CanUseGapFroidurePin, "for a semigroup",
41
+ [IsSemigroup], ReturnFalse);
42
+
43
+ InstallTrueMethod(CanUseGapFroidurePin,
44
+ IsSemigroup and HasMultiplicationTable and HasGeneratorsOfSemigroup);
45
+
46
+ InstallImmediateMethod(CanUseGapFroidurePin,
47
+ IsReesZeroMatrixSubsemigroup and HasRowsOfReesZeroMatrixSemigroup
48
+ and HasColumnsOfReesZeroMatrixSemigroup, 0,
49
+ function(R)
50
+ return IsPermGroup(UnderlyingSemigroup(R))
51
+ or CanUseFroidurePin(UnderlyingSemigroup(R));
52
+ end);
53
+
54
+ InstallImmediateMethod(CanUseGapFroidurePin,
55
+ IsReesZeroMatrixSubsemigroup and HasGeneratorsOfSemigroup, 0,
56
+ R -> CanUseFroidurePin(ParentAttr(R)));
57
+
58
+ InstallImmediateMethod(CanUseGapFroidurePin,
59
+ IsReesMatrixSubsemigroup and HasRowsOfReesMatrixSemigroup
60
+ and HasColumnsOfReesMatrixSemigroup, 0,
61
+ function(R)
62
+ return IsPermGroup(UnderlyingSemigroup(R))
63
+ or CanUseFroidurePin(UnderlyingSemigroup(R));
64
+ end);
65
+
66
+ InstallImmediateMethod(CanUseGapFroidurePin,
67
+ IsReesMatrixSubsemigroup and HasGeneratorsOfSemigroup, 0,
68
+ R -> CanUseFroidurePin(ParentAttr(R)));
69
+
70
+ # The next method is supposed to catch proper subsemigroups of quotient
71
+ # semigroups
72
+ InstallImmediateMethod(CanUseGapFroidurePin,
73
+ IsAssociativeElementCollColl and HasGeneratorsOfSemigroup, 0,
74
+ function(S)
75
+ if IsEmpty(GeneratorsOfSemigroup(S)) then
76
+ return false;
77
+ fi;
78
+ return (not IsQuotientSemigroup(S))
79
+ and IsCongruenceClass(GeneratorsOfSemigroup(S)[1]);
80
+ end);
81
+
82
+ InstallTrueMethod(CanUseGapFroidurePin,
83
+ IsSemigroupIdeal and IsReesMatrixSubsemigroup);
84
+
85
+ InstallTrueMethod(CanUseGapFroidurePin,
86
+ IsSemigroupIdeal and IsReesZeroMatrixSubsemigroup);
87
+
88
+ # Objects in IsDualSemigroupRep also CanUseGapFroidurePin but this is set
89
+ # at creation in attr/dual.gi
90
+
91
+ InstallMethod(GapFroidurePin, "for a semigroup with CanUseGapFroidurePin",
92
+ [CanUseGapFroidurePin],
93
+ function(S)
94
+ local data, hashlen, nrgens, nr, val, i;
95
+
96
+ data := rec(elts := [],
97
+ final := [],
98
+ first := [],
99
+ found := false,
100
+ genslookup := [],
101
+ left := [],
102
+ len := 1,
103
+ lenindex := [],
104
+ nrrules := 0,
105
+ parent := S,
106
+ prefix := [],
107
+ reduced := [[]],
108
+ right := [],
109
+ rules := [],
110
+ stopper := false,
111
+ suffix := [],
112
+ words := []);
113
+
114
+ hashlen := SEMIGROUPS.OptionsRec(S).hashlen;
115
+
116
+ data.gens := ShallowCopy(GeneratorsOfSemigroup(S));
117
+ nrgens := Length(data.gens);
118
+ data.ht := HTCreate(data.gens[1], rec(treehashsize := hashlen));
119
+ nr := 0;
120
+ data.one := false;
121
+ data.pos := 1;
122
+ data.lenindex[1] := 1;
123
+ data.genstoapply := [1 .. nrgens];
124
+
125
+ # add the generators
126
+ for i in data.genstoapply do
127
+ val := HTValue(data.ht, data.gens[i]);
128
+ if val = fail then # new generator
129
+ nr := nr + 1;
130
+ HTAdd(data.ht, data.gens[i], nr);
131
+ data.elts[nr] := data.gens[i];
132
+ data.words[nr] := [i];
133
+ data.first[nr] := i;
134
+ data.final[nr] := i;
135
+ data.prefix[nr] := 0;
136
+ data.suffix[nr] := 0;
137
+ data.left[nr] := EmptyPlist(nrgens);
138
+ data.right[nr] := EmptyPlist(nrgens);
139
+ data.genslookup[i] := nr;
140
+ data.reduced[nr] := List([1 .. nrgens], ReturnFalse);
141
+
142
+ if data.one = false and ForAll(data.gens,
143
+ y -> data.gens[i] * y = y
144
+ and y * data.gens[i] = y) then
145
+ data.one := nr;
146
+ fi;
147
+ else # duplicate generator
148
+ data.genslookup[i] := val;
149
+ data.nrrules := data.nrrules + 1;
150
+ data.rules[data.nrrules] := [[i], [val]];
151
+ fi;
152
+ od;
153
+
154
+ data.nr := nr;
155
+ return data;
156
+ end);
157
+
158
+ #############################################################################
159
+ # 1. Internal methods
160
+ #############################################################################
161
+
162
+ # This is a fallback method in case we don't know any better way to check this
163
+
164
+ # InstallMethod(IsFinite,
165
+ # "for a semigroup with CanUseGapFroidurePin and known generators",
166
+ # [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
167
+ # S -> Size(S) < infinity);
168
+
169
+ InstallMethod(AsSet,
170
+ "for a semigroup with CanUseGapFroidurePin and known generators",
171
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
172
+ function(S)
173
+ if not IsFinite(S) then
174
+ ErrorNoReturn("the argument (a semigroup) is not finite");
175
+ fi;
176
+ return SortedList(RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
177
+ InfoLevel(InfoSemigroups) > 0).elts);
178
+ end);
179
+
180
+ InstallMethod(AsList,
181
+ "for a semigroup with CanUseGapFroidurePin and known generators",
182
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
183
+ AsListCanonical);
184
+
185
+ InstallMethod(AsListCanonical,
186
+ "for a semigroup with CanUseGapFroidurePin and known generators",
187
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
188
+ function(S)
189
+ if not IsFinite(S) then
190
+ ErrorNoReturn("the argument (a semigroup) is not finite");
191
+ fi;
192
+ return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
193
+ InfoLevel(InfoSemigroups) > 0).elts;
194
+ end);
195
+
196
+ # For ideals and other generatorless semigroups
197
+
198
+ InstallMethod(AsListCanonical, "for a semigroup with CanUseGapFroidurePin",
199
+ [CanUseGapFroidurePin],
200
+ function(S)
201
+ GeneratorsOfSemigroup(S);
202
+ return AsListCanonical(S);
203
+ end);
204
+
205
+ InstallMethod(Enumerator,
206
+ "for a semigroup with CanUseGapFroidurePin and known generators",
207
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
208
+ function(S)
209
+ if (IsReesMatrixSubsemigroup(S) or IsReesZeroMatrixSubsemigroup(S))
210
+ and HasIsWholeFamily(S) and IsWholeFamily(S) then
211
+ TryNextMethod();
212
+ fi;
213
+ return EnumeratorCanonical(S);
214
+ end);
215
+
216
+ InstallMethod(EnumeratorSorted,
217
+ "for a semigroup with CanUseGapFroidurePin and known generators",
218
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
219
+ function(S)
220
+ if not IsFinite(S) then
221
+ ErrorNoReturn("the argument (a semigroup) is not finite");
222
+ fi;
223
+ TryNextMethod();
224
+ end);
225
+
226
+ InstallMethod(EnumeratorCanonical,
227
+ "for a semigroup with CanUseGapFroidurePin",
228
+ [CanUseGapFroidurePin],
229
+ function(S)
230
+ local enum;
231
+
232
+ if HasAsListCanonical(S) then
233
+ return AsListCanonical(S);
234
+ fi;
235
+
236
+ enum := rec();
237
+
238
+ # TODO Shouldn't S be stored in enum
239
+ enum.NumberElement := {enum, x} -> PositionCanonical(S, x);
240
+
241
+ enum.ElementNumber := function(_, nr)
242
+ local fp;
243
+ fp := GapFroidurePin(S);
244
+ if not (IsBound(fp.elts) and nr < Length(fp.elts) and IsBound(fp.elts[nr]))
245
+ then
246
+ fp := RUN_FROIDURE_PIN(fp, nr, InfoLevel(InfoSemigroups) > 0);
247
+ fi;
248
+
249
+ if nr <= Length(fp.elts) and IsBound(fp.elts[nr]) then
250
+ return fp.elts[nr];
251
+ fi;
252
+ return fail;
253
+ end;
254
+
255
+ enum.Length := enum -> Size(S);
256
+
257
+ enum.AsList := enum -> AsListCanonical(S);
258
+
259
+ enum.Membership := {x, enum} -> PositionCanonical(S, x) <> fail;
260
+
261
+ enum.IsBound\[\] := {enum, nr} -> nr <= Length(enum);
262
+
263
+ enum := EnumeratorByFunctions(S, enum);
264
+ SetIsSemigroupEnumerator(enum, true);
265
+ return enum;
266
+ end);
267
+
268
+ InstallMethod(IteratorCanonical,
269
+ "for a semigroup with CanUseGapFroidurePin",
270
+ [CanUseGapFroidurePin],
271
+ S -> IteratorFiniteList(EnumeratorCanonical(S)));
272
+
273
+ InstallMethod(Iterator,
274
+ "for a semigroup with CanUseGapFroidurePin",
275
+ [CanUseGapFroidurePin],
276
+ S -> IteratorFiniteList(Enumerator(S)));
277
+
278
+ InstallMethod(IteratorSorted,
279
+ "for a semigroup with CanUseGapFroidurePin",
280
+ [CanUseGapFroidurePin],
281
+ S -> IteratorFiniteList(EnumeratorSorted(S)));
282
+
283
+ # different method for ideals
284
+
285
+ InstallMethod(Size,
286
+ "for a semigroup with CanUseGapFroidurePin and known generators",
287
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
288
+ function(S)
289
+ return Length(RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
290
+ InfoLevel(InfoSemigroups) > 0).elts);
291
+ end);
292
+
293
+ # different method for ideals
294
+
295
+ InstallMethod(\in,
296
+ "for mult. elt. and a semigroup with CanUseGapFroidurePin + generators",
297
+ [IsMultiplicativeElement,
298
+ CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
299
+ {x, S} -> PositionCanonical(S, x) <> fail);
300
+
301
+ # different method for ideals
302
+
303
+ InstallMethod(Idempotents,
304
+ "for a semigroup with CanUseGapFroidurePin and known generators",
305
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
306
+ function(S)
307
+ if not IsFinite(S) then
308
+ ErrorNoReturn("the argument (a semigroup) is not finite");
309
+ fi;
310
+ return EnumeratorCanonical(S){IdempotentsSubset(S, [1 .. Size(S)])};
311
+ end);
312
+
313
+ InstallMethod(PositionCanonical,
314
+ "for a semigroup with CanUseGapFroidurePin, generators, and mult. elt",
315
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup,
316
+ IsMultiplicativeElement],
317
+ function(S, x)
318
+ local fp, ht, nr, val, limit, pos;
319
+
320
+ if FamilyObj(x) <> ElementsFamily(FamilyObj(S)) then
321
+ return fail;
322
+ fi;
323
+
324
+ fp := GapFroidurePin(S);
325
+ ht := fp.ht;
326
+ nr := fp.nr;
327
+ repeat
328
+ val := HTValue(ht, x);
329
+ if val <> fail then
330
+ return val;
331
+ fi;
332
+ limit := nr + 1;
333
+ fp := RUN_FROIDURE_PIN(fp, limit, InfoLevel(InfoSemigroups) > 0);
334
+ pos := fp.pos;
335
+ nr := fp.nr;
336
+ until pos > nr;
337
+
338
+ return HTValue(ht, x);
339
+ end);
340
+
341
+ # Position exists so that we can call it on objects with an uninitialised data
342
+ # structure, without first having to initialise the data structure to realise
343
+ # that <x> is not in it.
344
+
345
+ # This returns the current position of x, if it is already known to belong to
346
+ # S.
347
+
348
+ InstallMethod(Position,
349
+ "for a semigroup with CanUseGapFroidurePin, mult. element, zero cyc",
350
+ [CanUseGapFroidurePin, IsMultiplicativeElement, IsZeroCyc],
351
+ PositionOp);
352
+
353
+ InstallMethod(PositionOp,
354
+ "for a semigroup with CanUseGapFroidurePin, multi. element, zero cyc",
355
+ [CanUseGapFroidurePin, IsMultiplicativeElement, IsZeroCyc],
356
+ function(S, x, _)
357
+ if FamilyObj(x) <> ElementsFamily(FamilyObj(S)) then
358
+ return fail;
359
+ fi;
360
+ return HTValue(GapFroidurePin(S).ht, x);
361
+ end);
362
+
363
+ InstallMethod(PositionSortedOp,
364
+ "for a semigroup with CanUseGapFroidurePin, generators and mult. elt.",
365
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup,
366
+ IsMultiplicativeElement],
367
+ function(S, x)
368
+ if FamilyObj(x) <> ElementsFamily(FamilyObj(S)) then
369
+ return fail;
370
+ elif not IsFinite(S) then
371
+ ErrorNoReturn("the 1st argument (a semigroup) is not finite");
372
+ fi;
373
+ return Position(AsSet(S), x);
374
+ end);
375
+
376
+ InstallMethod(IsEnumerated, "for a semigroup with CanUseGapFroidurePin",
377
+ [CanUseGapFroidurePin],
378
+ function(S)
379
+ local fp;
380
+ if HasGapFroidurePin(S) then
381
+ fp := GapFroidurePin(S);
382
+ return fp.pos > fp.nr;
383
+ fi;
384
+ return false;
385
+ end);
386
+
387
+ # the main algorithm
388
+
389
+ InstallMethod(Enumerate,
390
+ "for a semigroup with CanUseGapFroidurePin and known generators and pos int",
391
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup, IsInt],
392
+ function(S, limit)
393
+ RUN_FROIDURE_PIN(GapFroidurePin(S), limit, InfoLevel(InfoSemigroups) > 0);
394
+ return S;
395
+ end);
396
+
397
+ InstallMethod(Enumerate,
398
+ "for a semigroup with CanUseGapFroidurePin and known generators",
399
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup],
400
+ S -> Enumerate(S, -1));
401
+
402
+ # same method for ideals
403
+
404
+ InstallMethod(RightCayleyGraphSemigroup,
405
+ "for a semigroup with CanUseGapFroidurePin",
406
+ [CanUseGapFroidurePin], 3,
407
+ function(S)
408
+ if not IsFinite(S) then
409
+ ErrorNoReturn("the argument (a semigroup) is not finite");
410
+ fi;
411
+ return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
412
+ InfoLevel(InfoSemigroups) > 0).right;
413
+ end);
414
+
415
+ InstallMethod(RightCayleyDigraph,
416
+ "for a semigroup with CanUseGapFroidurePin rep",
417
+ [CanUseGapFroidurePin],
418
+ function(S)
419
+ local D;
420
+ if not IsFinite(S) then
421
+ ErrorNoReturn("the argument (a semigroup) is not finite");
422
+ fi;
423
+
424
+ D := DigraphNC(MakeImmutable(RightCayleyGraphSemigroup(S)));
425
+ SetFilterObj(D, IsCayleyDigraph);
426
+ SetSemigroupOfCayleyDigraph(D, S);
427
+ SetGeneratorsOfCayleyDigraph(D, GeneratorsOfSemigroup(S));
428
+ return D;
429
+ end);
430
+
431
+ # same method for ideals
432
+
433
+ InstallMethod(LeftCayleyGraphSemigroup,
434
+ "for a semigroup with CanUseGapFroidurePin",
435
+ [CanUseGapFroidurePin], 3,
436
+ function(S)
437
+ if not IsFinite(S) then
438
+ ErrorNoReturn("the argument (a semigroup) is not finite");
439
+ fi;
440
+ return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
441
+ InfoLevel(InfoSemigroups) > 0).left;
442
+ end);
443
+
444
+ InstallMethod(LeftCayleyDigraph,
445
+ "for a semigroup with CanUseGapFroidurePin rep",
446
+ [CanUseGapFroidurePin],
447
+ function(S)
448
+ local D;
449
+ if not IsFinite(S) then
450
+ ErrorNoReturn("the argument (a semigroup) is not finite");
451
+ fi;
452
+ D := DigraphNC(MakeImmutable(LeftCayleyGraphSemigroup(S)));
453
+ SetFilterObj(D, IsCayleyDigraph);
454
+ SetSemigroupOfCayleyDigraph(D, S);
455
+ SetGeneratorsOfCayleyDigraph(D, GeneratorsOfSemigroup(S));
456
+ return D;
457
+ end);
458
+
459
+ InstallMethod(NrIdempotents, "for a semigroup with CanUseGapFroidurePin rep",
460
+ [CanUseGapFroidurePin],
461
+ function(S)
462
+ if not IsFinite(S) then
463
+ Error("the argument (a semigroup) is not finite");
464
+ fi;
465
+ return Length(Idempotents(S));
466
+ end);
467
+
468
+ InstallMethod(Factorization,
469
+ "for a semigroup with CanUseGapFroidurePin and a positive integer",
470
+ [CanUseGapFroidurePin, IsPosInt], MinimalFactorization);
471
+
472
+ InstallMethod(MinimalFactorization,
473
+ "for a semigroup with CanUseGapFroidurePin and a pos. int.",
474
+ [CanUseGapFroidurePin, IsPosInt],
475
+ function(S, i)
476
+ local words;
477
+
478
+ if i > Size(S) then
479
+ ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
480
+ "than the size of the 1st argument (a semigroup)");
481
+ fi;
482
+
483
+ words := RUN_FROIDURE_PIN(GapFroidurePin(S),
484
+ i + 1,
485
+ InfoLevel(InfoSemigroups) > 0).words;
486
+ return ShallowCopy(words[i]);
487
+ end);
488
+
489
+ InstallMethod(MinimalFactorization,
490
+ "for a semigroup with CanUseGapFroidurePin and a multiplicative element",
491
+ [CanUseGapFroidurePin, IsMultiplicativeElement],
492
+ function(S, x)
493
+ if not x in S then
494
+ ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
495
+ "of the 1st argument (a semigroup)");
496
+ fi;
497
+ return Factorization(S, PositionCanonical(S, x));
498
+ end);
499
+
500
+ InstallMethod(Factorization,
501
+ "for a semigroup with CanUseGapFroidurePin and a multiplicative element",
502
+ [CanUseGapFroidurePin, IsMultiplicativeElement], MinimalFactorization);
503
+
504
+ InstallMethod(RulesOfSemigroup,
505
+ "for a semigroup with CanUseGapFroidurePin",
506
+ [CanUseGapFroidurePin],
507
+ function(S)
508
+ if not IsFinite(S) then
509
+ Error("the argument (a semigroup) is not finite");
510
+ fi;
511
+ return RUN_FROIDURE_PIN(GapFroidurePin(S), -1,
512
+ InfoLevel(InfoSemigroups) > 0).rules;
513
+ end);
514
+
515
+ InstallMethod(IdempotentsSubset,
516
+ "for a semigroup with CanUseGapFroidurePin + known generators, hom. list",
517
+ [CanUseGapFroidurePin and HasGeneratorsOfSemigroup,
518
+ IsHomogeneousList],
519
+ function(S, list)
520
+ local fp, left, final, prefix, elts, out, i, j, pos;
521
+
522
+ fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
523
+ Maximum(list) + 1,
524
+ InfoLevel(InfoSemigroups) > 0);
525
+ left := fp.left;
526
+ final := fp.final;
527
+ prefix := fp.prefix;
528
+ elts := fp.elts;
529
+
530
+ out := [];
531
+ for pos in list do
532
+ i := pos;
533
+ j := pos;
534
+ repeat
535
+ j := left[j][final[i]];
536
+ i := prefix[i];
537
+ until i = 0;
538
+ if j = pos then
539
+ Add(out, pos);
540
+ fi;
541
+ od;
542
+ return out;
543
+ end);
544
+
545
+ InstallMethod(FirstLetter,
546
+ "for a semigroup with CanUseGapFroidurePin and a pos. int.",
547
+ [CanUseGapFroidurePin, IsPosInt],
548
+ function(S, i)
549
+ local fp;
550
+
551
+ if i > Size(S) then
552
+ ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
553
+ "than the size of the 1st argument (a semigroup)");
554
+ fi;
555
+
556
+ fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
557
+ i + 1,
558
+ InfoLevel(InfoSemigroups) > 0);
559
+ return fp.first[i];
560
+ end);
561
+
562
+ InstallMethod(FirstLetter,
563
+ "for a semigroup with CanUseGapFroidurePin and a multiplicative element",
564
+ [CanUseGapFroidurePin, IsMultiplicativeElement],
565
+ function(S, x)
566
+ if not x in S then
567
+ ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
568
+ "of the 1st argument (a semigroup)");
569
+ fi;
570
+ return FirstLetter(S, PositionCanonical(S, x));
571
+ end);
572
+
573
+ InstallMethod(FinalLetter,
574
+ "for a semigroup with CanUseGapFroidurePin and a pos. int.",
575
+ [CanUseGapFroidurePin, IsPosInt],
576
+ function(S, i)
577
+ local fp;
578
+
579
+ if i > Size(S) then
580
+ ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
581
+ "than the size of the 1st argument (a semigroup)");
582
+ fi;
583
+
584
+ fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
585
+ i + 1,
586
+ InfoLevel(InfoSemigroups) > 0);
587
+ return fp.final[i];
588
+ end);
589
+
590
+ InstallMethod(FinalLetter,
591
+ "for a semigroup with CanUseGapFroidurePin and a multiplicative element",
592
+ [CanUseGapFroidurePin, IsMultiplicativeElement],
593
+ function(S, x)
594
+ if not x in S then
595
+ ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
596
+ "of the 1st argument (a semigroup)");
597
+ fi;
598
+ return FinalLetter(S, PositionCanonical(S, x));
599
+ end);
600
+
601
+ InstallMethod(Prefix,
602
+ "for a semigroup with CanUseGapFroidurePin and a pos. int.",
603
+ [CanUseGapFroidurePin, IsPosInt],
604
+ function(S, i)
605
+ local fp;
606
+
607
+ if i > Size(S) then
608
+ ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
609
+ "than the size of the 1st argument (a semigroup)");
610
+ fi;
611
+
612
+ fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
613
+ i + 1,
614
+ InfoLevel(InfoSemigroups) > 0);
615
+ return fp.prefix[i];
616
+ end);
617
+
618
+ InstallMethod(Prefix,
619
+ "for a semigroup with CanUseGapFroidurePin and a multiplicative element",
620
+ [CanUseGapFroidurePin, IsMultiplicativeElement],
621
+ function(S, x)
622
+ if not x in S then
623
+ ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
624
+ "of the 1st argument (a semigroup)");
625
+ fi;
626
+ return Prefix(S, PositionCanonical(S, x));
627
+ end);
628
+
629
+ InstallMethod(Suffix,
630
+ "for a semigroup with CanUseGapFroidurePin and a pos. int.",
631
+ [CanUseGapFroidurePin, IsPosInt],
632
+ function(S, i)
633
+ local fp;
634
+
635
+ if i > Size(S) then
636
+ ErrorNoReturn("the 2nd argument (a positive integer) is greater ",
637
+ "than the size of the 1st argument (a semigroup)");
638
+ fi;
639
+
640
+ fp := RUN_FROIDURE_PIN(GapFroidurePin(S),
641
+ i + 1,
642
+ InfoLevel(InfoSemigroups) > 0);
643
+ return fp.suffix[i];
644
+ end);
645
+
646
+ InstallMethod(Suffix,
647
+ "for a semigroup with CanUseGapFroidurePin and a multiplicative element",
648
+ [CanUseGapFroidurePin, IsMultiplicativeElement],
649
+ function(S, x)
650
+ if not x in S then
651
+ ErrorNoReturn("the 2nd argument (a mult. elt.) is not an element ",
652
+ "of the 1st argument (a semigroup)");
653
+ fi;
654
+ return Suffix(S, PositionCanonical(S, x));
655
+ end);
@@ -0,0 +1,26 @@
1
+ ############################################################################
2
+ ##
3
+ ## main/graded.gd
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
+ # hash table of all lambda values found so far, HTValue of LambdaHT points
12
+ # to where the graded orbit is in GradedLambdaOrbs
13
+ # only applies in graded case
14
+ DeclareAttribute("GradedLambdaHT", IsActingSemigroup, "mutable");
15
+ DeclareAttribute("GradedRhoHT", IsActingSemigroup, "mutable");
16
+
17
+ DeclareGlobalFunction("GradedLambdaOrb");
18
+ DeclareGlobalFunction("GradedRhoOrb");
19
+ DeclareFilter("IsGradedLambdaOrb", IsLambdaOrb);
20
+ DeclareFilter("IsGradedRhoOrb", IsRhoOrb);
21
+
22
+ DeclareAttribute("GradedLambdaOrbs", IsActingSemigroup, "mutable");
23
+ DeclareGlobalFunction("IteratorOfGradedLambdaOrbs");
24
+ DeclareAttribute("GradedRhoOrbs", IsActingSemigroup, "mutable");
25
+ DeclareProperty("IsGradedLambdaOrbs", IsOrbit);
26
+ DeclareProperty("IsGradedRhoOrbs", IsOrbit);