passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-macosx_13_0_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 (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/x86_64-apple-darwin22-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1082 -0
  17. gap/pkg/semigroups/config.status +1134 -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 +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,821 @@
1
+ #############################################################################
2
+ ##
3
+ ## main/semiact.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
+ # The code coverage for this file is not as good as it could be.
12
+
13
+ SEMIGROUPS.ChangeDegreeOfTransformationSemigroup := function(o, old_deg, t)
14
+ local deg, extra, ht, max, i, orb;
15
+ deg := DegreeOfTransformationSemigroup(t);
16
+ orb := o!.orbit;
17
+ if IsLambdaOrb(o) then
18
+ # rehash the orbit values
19
+ extra := [old_deg + 1 .. deg];
20
+ ht := HTCreate(o[1], rec(treehashsize := o!.treehashsize));
21
+ # JDM: could make the treehashsize bigger if needed here!
22
+ HTAdd(ht, o[1], 1);
23
+ for i in [2 .. Length(o)] do
24
+ orb[i] := ShallowCopy(o[i]);
25
+ Append(o[i], extra);
26
+ HTAdd(ht, o[i], i);
27
+ od;
28
+ Unbind(o!.ht);
29
+ o!.ht := ht;
30
+
31
+ # change the action of <o> to that of <t>
32
+ o!.op := LambdaAct(t);
33
+ elif IsRhoOrb(o) then
34
+ ht := HTCreate(o[1], rec(treehashsize := o!.treehashsize));
35
+ # JDM: could make the treehashsize bigger if needed here!
36
+ HTAdd(ht, o[1], 1);
37
+ for i in [2 .. Length(o)] do
38
+ orb[i] := ShallowCopy(o[i]);
39
+ if not IsEmpty(o[i]) then
40
+ max := MaximumList(o[i]); # nr kernel classes
41
+ else
42
+ max := 0;
43
+ fi;
44
+ Append(o[i], [max + 1 .. max + deg - old_deg]);
45
+ HTAdd(ht, o[i], i);
46
+ od;
47
+ Unbind(o!.ht);
48
+ o!.ht := ht;
49
+
50
+ # change the action of <o> to that of <t>
51
+ o!.op := RhoAct(t);
52
+ fi;
53
+ return o;
54
+ end;
55
+
56
+ ## Methods for some standard things for acting semigroups.
57
+
58
+ InstallMethod(ClosureSemigroupOrMonoidNC,
59
+ "for a function, acting semigroup, finite list of mult. elts, and record",
60
+ [IsFunction,
61
+ IsActingSemigroup,
62
+ IsMultiplicativeElementCollection and IsList and IsFinite,
63
+ IsRecord],
64
+ function(Constructor, S, coll, opts)
65
+ local t, old_o, o, rho_o, old_deg, scc, old_scc, lookup, old_lookup, rho_ht,
66
+ new_data, old_data, max_rank, ht, new_orb, old_orb, new_nr, old_nr, graph,
67
+ old_graph, reps, lambdarhoht, rholookup, repslookup, orblookup1, orblookup2,
68
+ repslens, lenreps, new_schreierpos, old_schreierpos, new_schreiergen,
69
+ old_schreiergen, new_schreiermult, old_schreiermult, gens, nr_new_gens,
70
+ nr_old_gens, lambdaperm, rho, old_to_new, htadd, htvalue, i, x, pos, m, rank,
71
+ rhox, l, ind, pt, schutz, data_val, old, n, j;
72
+
73
+ # opts must be copied and processed before calling this function
74
+ # coll must be copied before calling this function
75
+
76
+ # TODO(later) split this into two methods, one for collections and the other
77
+ # for single elements
78
+ if Size(coll) > 1 then
79
+ coll := Shuffle(Set(coll));
80
+ n := ActionDegree(coll);
81
+ Sort(coll, {x, y} -> ActionRank(x, n) > ActionRank(y, n));
82
+ for x in coll do
83
+ S := ClosureSemigroupOrMonoidNC(Constructor, S, [x], opts);
84
+ od;
85
+ return S;
86
+ elif coll[1] in S then
87
+ return S;
88
+ fi;
89
+ # Size(coll) = 1 . . .
90
+
91
+ # init the semigroup or monoid
92
+ t := Constructor(S, coll, opts);
93
+
94
+ # if nothing is known about s, then return t
95
+ if not HasLambdaOrb(S) or IsSemigroupIdeal(S) then
96
+ return t;
97
+ fi;
98
+
99
+ # set up lambda orb for t
100
+ old_o := LambdaOrb(S);
101
+ o := StructuralCopy(old_o);
102
+ rho_o := StructuralCopy(RhoOrb(S));
103
+
104
+ if IsTransformationSemigroup(S) then
105
+ old_deg := DegreeOfTransformationSemigroup(S);
106
+ if old_deg < DegreeOfTransformationSemigroup(t) then
107
+ SEMIGROUPS.ChangeDegreeOfTransformationSemigroup(o, old_deg, t);
108
+ SEMIGROUPS.ChangeDegreeOfTransformationSemigroup(rho_o, old_deg, t);
109
+ fi;
110
+ fi;
111
+
112
+ coll[1] := ConvertToInternalElement(S, coll[1]);
113
+
114
+ AddGeneratorsToOrbit(o, coll);
115
+
116
+ # unbind everything related to strongly connected components, since
117
+ # even if the orbit length doesn't change the strongly connected components
118
+ # might
119
+ Unbind(o!.scc);
120
+ Unbind(o!.trees);
121
+ Unbind(o!.scc_lookup);
122
+ Unbind(o!.mults);
123
+ Unbind(o!.schutz);
124
+ Unbind(o!.reverse);
125
+ Unbind(o!.rev);
126
+ Unbind(o!.schutzstab);
127
+ Unbind(o!.factorgroups);
128
+ Unbind(o!.factors);
129
+
130
+ o!.parent := t;
131
+ o!.scc_reps := [FakeOne(GeneratorsOfSemigroup(t))];
132
+
133
+ SetLambdaOrb(t, o);
134
+
135
+ if not HasSemigroupData(S) or SemigroupData(S)!.pos = 0 then
136
+ return t;
137
+ fi;
138
+
139
+ scc := OrbSCC(o);
140
+ old_scc := OrbSCC(old_o);
141
+ lookup := o!.scc_lookup;
142
+
143
+ old_lookup := old_o!.scc_lookup;
144
+
145
+ # we don't do AddGeneratorsToOrbit of rho_o here because this is handled by
146
+ # Enumerate(SemigroupData.. later
147
+ rho_ht := rho_o!.ht;
148
+
149
+ # unbind everything related to strongly connected components, since
150
+ # even if the orbit length doesn't change the strongly connected components
151
+ # might
152
+ Unbind(rho_o!.scc);
153
+ Unbind(rho_o!.trees);
154
+ Unbind(rho_o!.scc_lookup);
155
+ Unbind(rho_o!.mults);
156
+ Unbind(rho_o!.schutz);
157
+ Unbind(rho_o!.reverse);
158
+ Unbind(rho_o!.rev);
159
+ Unbind(rho_o!.schutzstab);
160
+
161
+ rho_o!.parent := t;
162
+ rho_o!.scc_reps := [FakeOne(GeneratorsOfSemigroup(t))];
163
+ Append(rho_o!.gens, coll);
164
+ ResetFilterObj(rho_o, IsClosedOrbit);
165
+ SetRhoOrb(t, rho_o);
166
+
167
+ # get new and old R-rep orbit data
168
+ new_data := SemigroupData(t);
169
+ old_data := SemigroupData(S);
170
+ max_rank := MaximumList(List(coll, x -> ActionRank(t)(x)));
171
+
172
+ Assert(1, rho_o!.gens = new_data!.gens);
173
+ Assert(1, o!.gens = new_data!.gens);
174
+
175
+ ht := new_data!.ht;
176
+ # so far found R-reps
177
+
178
+ new_orb := new_data!.orbit;
179
+ old_orb := old_data!.orbit;
180
+ # the so far found R-reps data
181
+
182
+ new_nr := Length(new_orb);
183
+ old_nr := Length(old_orb);
184
+ # points in orb in position at most i have descendants
185
+
186
+ graph := new_data!.graph;
187
+ old_graph := old_data!.graph;
188
+ graph[1] := ShallowCopy(old_graph[1]);
189
+ # orbit graph of orbit of R-classes under left mult
190
+
191
+ reps := new_data!.reps;
192
+ # reps grouped by equal lambda and rho value
193
+ # HTValue(lambdarhoht, Concatenation(lambda(x), rho(x)))
194
+
195
+ lambdarhoht := new_data!.lambdarhoht;
196
+ rholookup := new_data!.rholookup;
197
+
198
+ repslookup := new_data!.repslookup;
199
+ # Position(orb, reps[i][j])=repslookup[i][j] = HTValue(ht, reps[i][j])
200
+
201
+ orblookup1 := new_data!.orblookup1;
202
+ # orblookup1[i] position in reps containing orb[i][4] (the R-rep)
203
+
204
+ orblookup2 := new_data!.orblookup2;
205
+ # orblookup2[i] position in reps[orblookup1[i]]
206
+ # containing orb[i][4] (the R-rep)
207
+
208
+ repslens := new_data!.repslens;
209
+ # Length(reps[i])=repslens[i]
210
+
211
+ lenreps := new_data!.lenreps;
212
+ # lenreps=Length(reps)
213
+
214
+ # schreier
215
+ new_schreierpos := new_data!.schreierpos;
216
+ old_schreierpos := old_data!.schreierpos;
217
+ new_schreiergen := new_data!.schreiergen;
218
+ old_schreiergen := old_data!.schreiergen;
219
+ new_schreiermult := new_data!.schreiermult;
220
+ old_schreiermult := old_data!.schreiermult;
221
+
222
+ # generators
223
+ gens := new_data!.gens;
224
+ nr_new_gens := Length(gens);
225
+ nr_old_gens := Length(old_data!.gens);
226
+
227
+ # lambda/rho
228
+ lambdaperm := LambdaPerm(t);
229
+ rho := RhoFunc(t);
230
+
231
+ # look up for old_to_new[i]:=Position(new_orb, old_orb[i]);
232
+ # i.e. position of old R-rep in new_orb
233
+ # TODO(later): this is mainly used to update the orbit graph of the R-rep
234
+ # orbit, but I think this could also be done during the main loop below.
235
+
236
+ old_to_new := EmptyPlist(old_nr);
237
+ old_to_new[1] := 1;
238
+
239
+ # initialise <reps>, <repslookup>, <repslens>, <lenreps>...
240
+ for i in [2 .. Length(scc)] do
241
+ reps[i] := [];
242
+ repslookup[i] := [];
243
+ repslens[i] := [];
244
+ lenreps[i] := 0;
245
+ od;
246
+
247
+ if IsBoundGlobal("ORBC") then
248
+ htadd := HTAdd_TreeHash_C;
249
+ htvalue := HTValue_TreeHash_C;
250
+ else
251
+ htadd := HTAdd;
252
+ htvalue := HTValue;
253
+ fi;
254
+
255
+ i := 1;
256
+
257
+ # install old R-class reps in new_orb
258
+ while new_nr <= old_nr and i < old_nr do
259
+ i := i + 1;
260
+
261
+ x := old_orb[i][4];
262
+
263
+ pos := old_schreiermult[i]; # lambda - index for x
264
+ m := lookup[pos];
265
+ rank := ActionRank(t)(x);
266
+
267
+ if rank > max_rank or scc[m][1] = old_scc[old_lookup[pos]][1] then
268
+ # in either case x is an old R-rep and so has rectified lambda value.
269
+ elif pos = old_scc[old_lookup[pos]][1] then
270
+ x := x * LambdaOrbMult(o, m, pos)[2];
271
+ else
272
+ # x has rectified lambda value but pos refers to the unrectified value
273
+ x := x * LambdaOrbMult(old_o, old_lookup[pos], pos)[1]
274
+ * LambdaOrbMult(o, m, pos)[2];
275
+ fi;
276
+
277
+ rhox := rho(x);
278
+ l := htvalue(rho_ht, rhox);
279
+ # l <> fail since we have copied the old rho values
280
+
281
+ if not IsBound(lambdarhoht[l]) then
282
+ # old rho-value, but new lambda-rho-combination
283
+
284
+ new_nr := new_nr + 1;
285
+ lenreps[m] := lenreps[m] + 1;
286
+ ind := lenreps[m];
287
+ lambdarhoht[l] := [];
288
+ lambdarhoht[l][m] := ind;
289
+
290
+ reps[m][ind] := [x];
291
+ repslookup[m][ind] := [new_nr];
292
+ repslens[m][ind] := 1;
293
+
294
+ orblookup1[new_nr] := ind;
295
+ orblookup2[new_nr] := 1;
296
+
297
+ pt := [t, m, o, x, false, new_nr];
298
+ elif not IsBound(lambdarhoht[l][m]) then
299
+ # old rho-value, but new lambda-rho-combination
300
+
301
+ new_nr := new_nr + 1;
302
+ lenreps[m] := lenreps[m] + 1;
303
+ ind := lenreps[m];
304
+ lambdarhoht[l][m] := ind;
305
+
306
+ reps[m][ind] := [x];
307
+ repslookup[m][ind] := [new_nr];
308
+ repslens[m][ind] := 1;
309
+
310
+ orblookup1[new_nr] := ind;
311
+ orblookup2[new_nr] := 1;
312
+
313
+ pt := [t, m, o, x, false, new_nr];
314
+ else
315
+ # old rho value, and maybe we already have a rep of y's R-class...
316
+ ind := lambdarhoht[l][m];
317
+ pt := [t, m, o, x, false, new_nr + 1];
318
+ if not rank > max_rank then
319
+ # this is maybe a new R-reps and so tests are required...
320
+
321
+ # check membership in Schutzenberger group via stabiliser chain
322
+ schutz := LambdaOrbStabChain(o, m);
323
+
324
+ if schutz = true then
325
+ # the Schutzenberger group is the symmetric group
326
+ old_to_new[i] := repslookup[m][ind][1];
327
+ continue;
328
+ else
329
+ if schutz = false then
330
+ # the Schutzenberger group is trivial
331
+ data_val := htvalue(ht, x);
332
+ if data_val <> fail then
333
+ old_to_new[i] := data_val;
334
+ continue;
335
+ fi;
336
+ else
337
+ # the Schutzenberger group is neither trivial nor symmetric group
338
+ old := false;
339
+ for n in [1 .. repslens[m][ind]] do
340
+ if SchutzGpMembership(S)(schutz, lambdaperm(reps[m][ind][n], x))
341
+ then
342
+ old := true;
343
+ old_to_new[i] := repslookup[m][ind][n];
344
+ break;
345
+ fi;
346
+ od;
347
+ if old then
348
+ continue;
349
+ fi;
350
+ fi;
351
+ fi;
352
+ fi;
353
+ # if rank>max_rank, then <y> is an old R-rep and hence a new one too
354
+ new_nr := new_nr + 1;
355
+ repslens[m][ind] := repslens[m][ind] + 1;
356
+ reps[m][ind][repslens[m][ind]] := x;
357
+ repslookup[m][ind][repslens[m][ind]] := new_nr;
358
+ orblookup1[new_nr] := ind;
359
+ orblookup2[new_nr] := repslens[m][ind];
360
+ fi;
361
+ rholookup[new_nr] := l;
362
+ new_orb[new_nr] := pt;
363
+ graph[new_nr] := ShallowCopy(old_graph[i]);
364
+ new_schreierpos[new_nr] := old_to_new[old_schreierpos[i]];
365
+ # orb[nr] is obtained from orb[i]
366
+ new_schreiergen[new_nr] := old_schreiergen[i];
367
+ # by multiplying by gens[j]
368
+ new_schreiermult[new_nr] := pos; # and ends up in position <pos> of
369
+ # its lambda orb
370
+ htadd(ht, x, new_nr);
371
+ old_to_new[i] := new_nr;
372
+ od;
373
+
374
+ # process the orbit graph
375
+ for i in [1 .. new_nr] do
376
+ for j in [1 .. Length(graph[i])] do
377
+ graph[i][j] := old_to_new[graph[i][j]];
378
+ od;
379
+ od;
380
+
381
+ # apply new generators to old R-reps
382
+ new_data!.genstoapply := [nr_old_gens + 1 .. nr_new_gens];
383
+ new_data!.pos := 0;
384
+ new_data!.stopper := old_to_new[old_data!.pos];
385
+ new_data!.init := true;
386
+ Enumerate(new_data, infinity, ReturnFalse);
387
+
388
+ new_data!.pos := old_to_new[old_data!.pos];
389
+ new_data!.stopper := false;
390
+ new_data!.genstoapply := [1 .. nr_new_gens];
391
+
392
+ return t;
393
+ end);
394
+
395
+ InstallMethod(ClosureInverseSemigroupOrMonoidNC,
396
+ "for a function, inverse acting semigroup, finite list of mult. elts, and rec",
397
+ [IsFunction,
398
+ IsInverseActingSemigroupRep,
399
+ IsMultiplicativeElementCollection and IsList and IsFinite,
400
+ IsRecord],
401
+ function(Constructor, S, coll, opts)
402
+ local gens, T, o, n, x;
403
+
404
+ # opts must be copied and processed before calling this function
405
+ # coll must be copied before calling this function
406
+
407
+ if IsSemigroupIdeal(S) then
408
+ TryNextMethod();
409
+ fi;
410
+
411
+ # TODO(later) split this into two methods
412
+ if Size(coll) > 1 then
413
+ coll := Shuffle(Set(coll));
414
+ n := ActionDegree(coll);
415
+ Sort(coll, {x, y} -> ActionRank(x, n) > ActionRank(y, n));
416
+
417
+ for x in coll do
418
+ S := ClosureInverseSemigroupOrMonoidNC(Constructor, S, [x], opts);
419
+ od;
420
+ return S;
421
+ elif coll[1] in S then
422
+ return S;
423
+ fi;
424
+
425
+ gens := GeneratorsOfInverseSemigroup(S);
426
+ T := Constructor(Concatenation(gens, coll), opts);
427
+
428
+ if not IsIdempotent(coll[1]) then
429
+ Add(coll, coll[1] ^ -1);
430
+ fi;
431
+
432
+ if Constructor = InverseMonoid and One(T) <> One(S) then
433
+ Add(coll, One(T));
434
+ fi;
435
+
436
+ o := StructuralCopy(LambdaOrb(S));
437
+ coll[1] := ConvertToInternalElement(S, coll[1]);
438
+ AddGeneratorsToOrbit(o, coll);
439
+
440
+ # Remove everything related to strongly connected components
441
+ Unbind(o!.scc);
442
+ Unbind(o!.trees);
443
+ Unbind(o!.scc_lookup);
444
+ Unbind(o!.mults);
445
+ Unbind(o!.schutz);
446
+ Unbind(o!.reverse);
447
+ Unbind(o!.rev);
448
+ Unbind(o!.schutzstab);
449
+ Unbind(o!.factorgroups);
450
+ Unbind(o!.factors);
451
+
452
+ o!.parent := T;
453
+ o!.scc_reps := [FakeOne(o!.gens)];
454
+
455
+ SetLambdaOrb(T, o);
456
+ return T;
457
+ end);
458
+
459
+ # different method for inverse/regular, same for ideals
460
+
461
+ InstallMethodWithRandomSource(Random,
462
+ "for a random source and an acting semigroup",
463
+ [IsRandomSource, IsActingSemigroup],
464
+ function(rs, s)
465
+ local data, gens, i, w, x, n, m, o, rep, g;
466
+
467
+ data := SemigroupData(s);
468
+
469
+ if not IsClosedData(data) then
470
+ if HasGeneratorsOfSemigroup(s) then
471
+ gens := GeneratorsOfSemigroup(s);
472
+ i := Random(rs, 1, 2 * Length(gens));
473
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
474
+ return EvaluateWord(gens, w);
475
+ elif IsSemigroupIdeal(s) and HasGeneratorsOfSemigroupIdeal(s) then
476
+ # This clause is currently unreachable
477
+ x := Random(rs, 1, Length(GeneratorsOfSemigroupIdeal(s)));
478
+ gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(s));
479
+
480
+ i := Random(rs, 1, Length(gens));
481
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
482
+
483
+ x := x * EvaluateWord(gens, w);
484
+
485
+ i := Random(rs, 1, Length(gens));
486
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
487
+ return EvaluateWord(gens, w) * x;
488
+ fi;
489
+ fi;
490
+
491
+ n := Random(rs, 2, Length(data!.orbit));
492
+ m := data[n][2];
493
+ o := data[n][3];
494
+ rep := data[n][4];
495
+
496
+ g := Random(rs, LambdaOrbSchutzGp(o, m));
497
+ i := Random(rs, OrbSCC(o)[m]);
498
+ return ConvertToExternalElement(s,
499
+ StabilizerAction(s)(rep, g)
500
+ * LambdaOrbMult(o, m, i)[1]);
501
+ end);
502
+
503
+ # different method for inverse, same method for ideals
504
+
505
+ InstallMethodWithRandomSource(Random,
506
+ "for a random source and a regular acting semigroup rep",
507
+ [IsRandomSource, IsRegularActingSemigroupRep],
508
+ function(rs, S)
509
+ local gens, i, w, x, o, m;
510
+
511
+ if not IsClosedOrbit(LambdaOrb(S)) or not IsClosedOrbit(RhoOrb(S)) then
512
+ if HasGeneratorsOfSemigroup(S) then
513
+ gens := GeneratorsOfSemigroup(S);
514
+ i := Random(rs, 1, 2 * Int(Length(gens)));
515
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
516
+ return EvaluateWord(gens, w);
517
+ else
518
+ x := Random(rs, GeneratorsOfSemigroupIdeal(S));
519
+ gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(S));
520
+
521
+ i := Random(rs, 1, Length(gens));
522
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
523
+
524
+ x := x * EvaluateWord(gens, w);
525
+
526
+ i := Random(rs, 1, Length(gens));
527
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
528
+ return EvaluateWord(gens, w) * x;
529
+ fi;
530
+ fi;
531
+
532
+ o := LambdaOrb(S);
533
+ i := Random(rs, 2, Length(o));
534
+ m := OrbSCCLookup(o)[i];
535
+ x := LambdaOrbRep(o, m)
536
+ * Random(rs, LambdaOrbSchutzGp(o, m))
537
+ * LambdaOrbMult(o, m, i)[1];
538
+
539
+ o := RhoOrb(S);
540
+ m := OrbSCCLookup(o)[Position(o, RhoFunc(S)(x))];
541
+ i := Random(rs, OrbSCC(o)[m]);
542
+
543
+ return ConvertToExternalElement(S, RhoOrbMult(o, m, i)[1] * x);
544
+ end);
545
+
546
+ # same method for inverse ideals
547
+
548
+ InstallMethodWithRandomSource(Random,
549
+ "for a random source and and an acting inverse semigroup rep and generators",
550
+ [IsRandomSource, IsInverseActingSemigroupRep],
551
+ function(rs, S)
552
+ local gens, i, w, x, o, m;
553
+
554
+ if not IsClosedOrbit(LambdaOrb(S)) then
555
+ if HasGeneratorsOfSemigroup(S) then
556
+ gens := GeneratorsOfSemigroup(S);
557
+ i := Random(rs, 1, 2 * Int(Length(gens)));
558
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
559
+ return EvaluateWord(gens, w);
560
+ else
561
+ x := Random(rs, GeneratorsOfSemigroupIdeal(S));
562
+ gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(S));
563
+
564
+ i := Random(rs, 1, Length(gens) / 2);
565
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
566
+
567
+ x := x * EvaluateWord(gens, w);
568
+
569
+ i := Random(rs, 1, Length(gens) / 2);
570
+ w := List([1 .. i], x -> Random(rs, 1, Length(gens)));
571
+ return EvaluateWord(gens, w) * x;
572
+ fi;
573
+ fi;
574
+
575
+ o := LambdaOrb(S);
576
+ i := Random(rs, 2, Length(o));
577
+ m := OrbSCCLookup(o)[i];
578
+ x := LambdaOrbRep(o, m)
579
+ * Random(rs, LambdaOrbSchutzGp(o, m))
580
+ * LambdaOrbMult(o, m, i)[1];
581
+
582
+ i := Random(rs, OrbSCC(o)[m]);
583
+
584
+ return ConvertToExternalElement(S, LambdaOrbMult(o, m, i)[2] * x);
585
+ end);
586
+
587
+ #############################################################################
588
+
589
+ # different method for inverse, same method for ideals
590
+
591
+ InstallMethod(\in,
592
+ "for a multiplicative element and regular acting semigroup rep",
593
+ [IsMultiplicativeElement, IsRegularActingSemigroupRep],
594
+ function(x, S)
595
+ local pos_lambda, pos_rho, m, schutz, n, rep;
596
+
597
+ if ElementsFamily(FamilyObj(S)) <> FamilyObj(x)
598
+ or (IsActingSemigroupWithFixedDegreeMultiplication(S)
599
+ and ActionDegree(x) <> ActionDegree(S))
600
+ or ActionDegree(x) > ActionDegree(S) then
601
+ return false;
602
+ elif Position(S, x) <> fail then # check if x is already known to be in S
603
+ return true;
604
+ elif IsEnumerated(S) then
605
+ return false;
606
+ elif HasAsSSortedList(S) then
607
+ # This is currently unreachable
608
+ return x in AsSSortedList(S);
609
+ elif not (IsMonoid(S) and IsOne(x)) then
610
+ if Length(Generators(S)) > 0
611
+ and ActionRank(S)(x) >
612
+ MaximumList(List(Generators(S), y -> ActionRank(S)(y))) then
613
+ Info(InfoSemigroups, 2, "element has larger rank than any element of ",
614
+ "semigroup");
615
+ return false;
616
+ fi;
617
+ fi;
618
+
619
+ if HasMinimalIdeal(S) then
620
+ if ActionRank(S)(x) < ActionRank(S)(Representative(MinimalIdeal(S))) then
621
+ Info(InfoSemigroups, 2, "element has smaller rank than any element of ",
622
+ "semigroup.");
623
+ return false;
624
+ fi;
625
+ fi;
626
+
627
+ x := ConvertToInternalElement(S, x);
628
+ pos_lambda := Position(Enumerate(LambdaOrb(S)), LambdaFunc(S)(x));
629
+
630
+ if pos_lambda = fail then
631
+ return false;
632
+ fi;
633
+
634
+ pos_rho := EnumeratePosition(RhoOrb(S), RhoFunc(S)(x), false);
635
+ # this is worth it in the case that schutz=true below! For example, in the
636
+ # full transformation monoid on 12 points (see Issue 22 in testinstall.tst)
637
+
638
+ if pos_rho = fail then
639
+ return false;
640
+ fi;
641
+
642
+ m := OrbSCCLookup(LambdaOrb(S))[pos_lambda];
643
+ schutz := LambdaOrbStabChain(LambdaOrb(S), m);
644
+
645
+ if schutz = true then
646
+ return true;
647
+ elif pos_lambda <> OrbSCC(LambdaOrb(S))[m][1] then
648
+ x := x * LambdaOrbMult(LambdaOrb(S), m, pos_lambda)[2];
649
+ fi;
650
+
651
+ n := OrbSCCLookup(Enumerate(RhoOrb(S)))[pos_rho];
652
+
653
+ if pos_rho <> OrbSCC(RhoOrb(S))[n][1] then
654
+ x := RhoOrbMult(RhoOrb(S), n, pos_rho)[2] * x;
655
+ fi;
656
+
657
+ if IsIdempotent(x) then
658
+ return true;
659
+ fi;
660
+
661
+ rep := LambdaOrbRep(LambdaOrb(S), m);
662
+ pos_rho := Position(RhoOrb(S), RhoFunc(S)(rep));
663
+
664
+ if OrbSCCLookup(RhoOrb(S))[pos_rho] <> n then
665
+ # Cannot currently find an example that enters here.
666
+ return false;
667
+ elif pos_rho <> OrbSCC(RhoOrb(S))[n][1] then
668
+ rep := RhoOrbMult(RhoOrb(S), n, pos_rho)[2] * rep;
669
+ fi;
670
+
671
+ if rep = x then
672
+ return true;
673
+ elif schutz = false then
674
+ return false;
675
+ fi;
676
+
677
+ return SchutzGpMembership(S)(schutz, LambdaPerm(S)(rep, x));
678
+ end);
679
+
680
+ # same method for inverse ideals
681
+ # TODO(later) clean this up
682
+
683
+ InstallMethod(\in,
684
+ "for a multiplicative element and inverse acting semigroup rep",
685
+ [IsMultiplicativeElement, IsInverseActingSemigroupRep],
686
+ function(x, S)
687
+ local o, lambda, lambda_l, rho, rho_l, m, schutz, scc, rep;
688
+
689
+ if ElementsFamily(FamilyObj(S)) <> FamilyObj(x)
690
+ or (IsActingSemigroupWithFixedDegreeMultiplication(S)
691
+ and ActionDegree(x) <> ActionDegree(S))
692
+ or ActionDegree(x) > ActionDegree(S) then
693
+ return false;
694
+ elif HasFroidurePin(S) and Position(S, x) <> fail then
695
+ # check if x is already known to be in S
696
+ return true;
697
+ elif HasFroidurePin(S) and IsEnumerated(S) then
698
+ return false;
699
+ elif HasAsSSortedList(S) then
700
+ return x in AsSSortedList(S);
701
+ elif not (IsMonoid(S) and IsOne(x)) then
702
+ if Length(Generators(S)) > 0
703
+ and ActionRank(S)(x) >
704
+ MaximumList(List(Generators(S), x -> ActionRank(S)(x))) then
705
+ Info(InfoSemigroups, 2, "element has larger rank than any element of ",
706
+ "semigroup.");
707
+ return false;
708
+ fi;
709
+ fi;
710
+
711
+ if HasMinimalIdeal(S) then
712
+ if ActionRank(S)(x) < ActionRank(S)(Representative(MinimalIdeal(S))) then
713
+ Info(InfoSemigroups, 2, "element has smaller rank than any element of ",
714
+ "semigroup.");
715
+ return false;
716
+ fi;
717
+ fi;
718
+
719
+ x := ConvertToInternalElement(S, x);
720
+
721
+ o := LambdaOrb(S);
722
+ Enumerate(o);
723
+ lambda := LambdaFunc(S)(x);
724
+ lambda_l := Position(o, lambda);
725
+
726
+ if lambda_l = fail then
727
+ return false;
728
+ fi;
729
+
730
+ rho := RhoFunc(S)(x);
731
+ rho_l := Position(o, rho);
732
+
733
+ if rho_l = fail then
734
+ return false;
735
+ fi;
736
+
737
+ # must use LambdaOrb(S) and not a graded lambda orb as LambdaOrbRep(o, m)
738
+ # when o is graded, is just f and hence \in will always return true!!
739
+ m := OrbSCCLookup(o)[lambda_l];
740
+
741
+ if OrbSCCLookup(o)[rho_l] <> m then
742
+ return false;
743
+ fi;
744
+
745
+ schutz := LambdaOrbStabChain(o, m);
746
+
747
+ if schutz = true then
748
+ return true;
749
+ fi;
750
+
751
+ scc := OrbSCC(o)[m];
752
+
753
+ if lambda_l <> scc[1] then
754
+ x := x * LambdaOrbMult(o, m, lambda_l)[2];
755
+ fi;
756
+
757
+ if rho_l <> scc[1] then
758
+ x := LambdaOrbMult(o, m, rho_l)[1] * x;
759
+ fi;
760
+
761
+ if IsIdempotent(x) then
762
+ return true;
763
+ elif schutz = false then
764
+ return false;
765
+ fi;
766
+
767
+ rep := LambdaOrbRep(LambdaOrb(S), m);
768
+ rho_l := Position(LambdaOrb(S), RhoFunc(S)(rep));
769
+
770
+ if rho_l <> OrbSCC(LambdaOrb(S))[m][1] then
771
+ # the D-class rep corresponding to lambda_o and scc.
772
+ rep := LambdaOrbMult(LambdaOrb(S), m, rho_l)[1] * rep;
773
+ fi;
774
+ return SchutzGpMembership(S)(schutz, LambdaPerm(S)(rep, x));
775
+ end);
776
+
777
+ # different method for inverse semigroups
778
+
779
+ InstallMethod(Size, "for a regular acting semigroup rep",
780
+ [IsRegularActingSemigroupRep],
781
+ function(s)
782
+ local lambda_o, rho_o, nr, lambda_scc, rho_scc, r, rhofunc, lookup,
783
+ rho, m;
784
+
785
+ lambda_o := Enumerate(LambdaOrb(s), infinity);
786
+ rho_o := Enumerate(RhoOrb(s), infinity);
787
+
788
+ nr := 0;
789
+ lambda_scc := OrbSCC(lambda_o);
790
+ rho_scc := OrbSCC(rho_o);
791
+ r := Length(lambda_scc);
792
+ rhofunc := RhoFunc(s);
793
+ lookup := OrbSCCLookup(rho_o);
794
+
795
+ for m in [2 .. r] do
796
+ rho := rhofunc(LambdaOrbRep(lambda_o, m));
797
+ nr := nr + Length(lambda_scc[m]) * Size(LambdaOrbSchutzGp(lambda_o, m)) *
798
+ Length(rho_scc[lookup[Position(rho_o, rho)]]);
799
+ od;
800
+
801
+ return nr;
802
+ end);
803
+
804
+ # same method for inverse ideals
805
+
806
+ InstallMethod(Size, "for an acting inverse semigroup rep",
807
+ [IsInverseActingSemigroupRep], 10,
808
+ function(s)
809
+ local o, scc, r, nr, m;
810
+
811
+ o := LambdaOrb(s);
812
+ Enumerate(o, infinity);
813
+ scc := OrbSCC(o);
814
+ r := Length(scc);
815
+ nr := 0;
816
+
817
+ for m in [2 .. r] do
818
+ nr := nr + Length(scc[m]) ^ 2 * Size(LambdaOrbSchutzGp(o, m));
819
+ od;
820
+ return nr;
821
+ end);