passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-musllinux_1_2_aarch64.whl

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

Potentially problematic release.


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

Files changed (356) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-unknown-linux-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1021 -0
  17. gap/pkg/semigroups/config.status +1131 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +356 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libgcc_s-2d945d6c.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-81d76771.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-85f2cd6d.so.6.0.33 +0 -0
  354. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  355. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  356. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,1155 @@
1
+ #############################################################################
2
+ ##
3
+ ## ideals/acting.gi
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ # This file contains methods for ideals of acting semigroups, and it requires
12
+ # some cleaning up.
13
+
14
+ # Attributes with better methods than the ones for
15
+ # IsActingSemigroup without IsSemigroupIdeal.
16
+
17
+ # This is here so that for regular ideals this method has higher rank than the
18
+ # method for IsSemigroup.
19
+
20
+ InstallMethod(NrDClasses, "for an inverse acting semigroup ideal rep",
21
+ [IsInverseActingSemigroupRep and IsSemigroupIdeal],
22
+ {I} -> Length(OrbSCC(LambdaOrb(I))) - 1);
23
+
24
+ InstallMethod(NrDClasses, "for a regular acting semigroup ideal rep",
25
+ [IsRegularActingSemigroupRep and IsSemigroupIdeal],
26
+ function(I)
27
+ Enumerate(SemigroupIdealData(I));
28
+ return Length(SemigroupIdealData(I)!.dorbit);
29
+ end);
30
+
31
+ InstallMethod(GreensDClasses, "for a regular acting semigroup ideal rep",
32
+ [IsSemigroupIdeal and IsRegularActingSemigroupRep],
33
+ function(I)
34
+ if IsInverseActingSemigroupRep(I) then
35
+ TryNextMethod();
36
+ fi;
37
+ Enumerate(SemigroupIdealData(I));
38
+ return SemigroupIdealData(I)!.dorbit;
39
+ end);
40
+
41
+ InstallMethod(PartialOrderOfDClasses,
42
+ "for a regular acting semigroup ideal rep",
43
+ [IsSemigroupIdeal and IsRegularActingSemigroupRep],
44
+ function(I)
45
+ local data, D;
46
+ if IsInverseActingSemigroupRep(I) then
47
+ TryNextMethod();
48
+ fi;
49
+ data := SemigroupIdealData(I);
50
+ Enumerate(data);
51
+ D := DigraphNC(IsMutableDigraph, data!.poset);
52
+ DigraphRemoveLoops(D);
53
+ MakeImmutable(D);
54
+ return D;
55
+ end);
56
+
57
+ InstallMethod(DClassReps, "for a regular acting semigroup ideal rep",
58
+ [IsSemigroupIdeal and IsRegularActingSemigroupRep],
59
+ function(I)
60
+ local data;
61
+ if IsInverseActingSemigroupRep(I) then
62
+ TryNextMethod();
63
+ fi;
64
+ data := SemigroupIdealData(I);
65
+ Enumerate(data);
66
+ return List(data!.dorbit, Representative);
67
+ end);
68
+
69
+ # the really technical stuff...
70
+
71
+ InstallMethod(SemigroupData, "for a regular acting semigroup ideal rep",
72
+ [IsRegularActingSemigroupRep and IsSemigroupIdeal],
73
+ SemigroupIdealData);
74
+
75
+ # JDM this method should become obsolete in time...
76
+ # <I> is not known to be regular if this function is invoked...
77
+
78
+ InstallMethod(SemigroupData, "for an acting semigroup ideal",
79
+ [IsActingSemigroup and IsSemigroupIdeal],
80
+ function(I)
81
+ local data, pos, partial, classes, D, U, inj, i, j, C;
82
+ # the maximal D-classes of the supersemigroup of <I> contained in <I>
83
+ data := Enumerate(SemigroupIdealData(I));
84
+ pos := [1 .. data!.genspos - 1];
85
+ # the D-classes of the generators in positions
86
+ # [1 .. n - 1] in data!.dorbit
87
+ partial := data!.poset;
88
+ classes := data!.dorbit;
89
+ D := [];
90
+ for i in pos do
91
+ if not ForAny([1 .. Length(partial)], j -> j <> i and i in partial[j]) then
92
+ Add(D, classes[i]);
93
+ fi;
94
+ od;
95
+
96
+ # find generators for I...
97
+ U := Semigroup(GeneratorsOfSemigroupIdeal(I), SEMIGROUPS.OptionsRec(I));
98
+
99
+ for i in [1 .. Length(D)] do
100
+ if IsRegularDClass(D[i]) then
101
+ inj := InverseGeneralMapping(InjectionPrincipalFactor(D[i]));
102
+ U := ClosureSemigroup(U, OnTuples(GeneratorsOfSemigroup(Source(inj)),
103
+ inj));
104
+ else
105
+ U := ClosureSemigroup(U, D[i]);
106
+ fi;
107
+ od;
108
+
109
+ i := 0;
110
+
111
+ while Size(U) <> Size(I) do
112
+ i := i + 1;
113
+ j := 0;
114
+ while Size(U) <> Size(I) and j < Length(partial[i]) do
115
+ j := j + 1;
116
+ if Length(partial[i]) = 1 or partial[i][j] <> i then
117
+ C := classes[partial[i][j]];
118
+ if IsRegularDClass(C) then
119
+ inj := InverseGeneralMapping(InjectionPrincipalFactor(C));
120
+ U := ClosureSemigroup(U, OnTuples(GeneratorsOfSemigroup(Source(inj)),
121
+ inj));
122
+ else
123
+ U := ClosureSemigroup(U, AsList(C));
124
+ fi;
125
+ fi;
126
+ od;
127
+ od;
128
+
129
+ SetGeneratorsOfSemigroup(I, GeneratorsOfSemigroup(U));
130
+ SetLambdaOrb(I, LambdaOrb(U));
131
+ SetRhoOrb(I, RhoOrb(U));
132
+ # JDM: maybe more is required here to remove U from the semigroup data, like
133
+ # replacing U with I in the first position of every entry of the data, and in
134
+ # the different internal components of the data.
135
+ return SemigroupData(U);
136
+ end);
137
+
138
+ InstallMethod(GeneratorsOfSemigroup, "for an acting semigroup ideal",
139
+ [IsActingSemigroup and IsSemigroupIdeal],
140
+ function(I)
141
+ local data, pos, partial, classes, D, U, inj, i, j;
142
+
143
+ if not IsRegularActingSemigroupRep(I) then
144
+ return SemigroupData(I)!.gens;
145
+ fi;
146
+
147
+ Info(InfoWarning, 2, "finding a generating set of a semigroup ideal!");
148
+ data := SemigroupIdealData(I);
149
+ Enumerate(data, infinity, ReturnFalse);
150
+ pos := [1 .. data!.genspos - 1];
151
+ # the D-classes of the generators in positions
152
+ # [1..n-1] in data!.dorbit
153
+ partial := data!.poset;
154
+ classes := data!.dorbit;
155
+ D := [];
156
+ for i in pos do
157
+ Add(D, classes[i]);
158
+ od;
159
+
160
+ # find generators for I...
161
+ U := Semigroup(GeneratorsOfSemigroupIdeal(I));
162
+
163
+ for i in [1 .. Length(D)] do
164
+ inj := InverseGeneralMapping(InjectionPrincipalFactor(D[i]));
165
+ U := ClosureSemigroup(U, OnTuples(GeneratorsOfSemigroup(Source(inj)),
166
+ inj));
167
+ od;
168
+
169
+ i := 0;
170
+ classes := data!.dorbit;
171
+
172
+ while Size(U) <> Size(I) do
173
+ i := i + 1;
174
+ j := 0;
175
+ while Size(U) <> Size(I) and j < Length(partial[i]) do
176
+ j := j + 1;
177
+ if Length(partial[i]) = 1 or partial[i][j] <> i then
178
+ inj := InjectionPrincipalFactor(classes[partial[i][j]]);
179
+ inj := InverseGeneralMapping(inj);
180
+ U := ClosureSemigroup(U, OnTuples(GeneratorsOfSemigroup(Source(inj)),
181
+ inj));
182
+ fi;
183
+ od;
184
+ od;
185
+
186
+ return GeneratorsOfSemigroup(U);
187
+ end);
188
+
189
+ # Don't think that this applies to semigroups of matrices over finite fields,
190
+ # so this doesn't require us to use ConvertToInternalElement
191
+ # TODO(FixExtremeTests): check that this is really correct
192
+
193
+ InstallMethod(GeneratorsOfSemigroup,
194
+ "for an inverse acting semigroup rep ideal",
195
+ [IsInverseActingSemigroupRep and IsSemigroupIdeal],
196
+ function(I)
197
+ local U, partial, D, pos, inj, i, j, C, gens;
198
+
199
+ Info(InfoWarning, 2, "finding a generating set of a semigroup ideal!");
200
+
201
+ # find generators for I...
202
+ U := InverseSemigroup(MinimalIdealGeneratingSet(I));
203
+ partial := OutNeighbours(PartialOrderOfDClasses(I));
204
+ D := GreensDClasses(I);
205
+
206
+ # positions of the D-classes containing generators of the ideal...
207
+ pos := Set(GeneratorsOfSemigroupIdeal(I),
208
+ x -> OrbSCCLookup(LambdaOrb(I))[Position(LambdaOrb(I),
209
+ LambdaFunc(I)(x))] - 1);
210
+
211
+ for i in pos do
212
+ inj := InverseGeneralMapping(InjectionPrincipalFactor(D[i]));
213
+ U := ClosureInverseSemigroup(U,
214
+ OnTuples(GeneratorsOfSemigroup(Source(inj)),
215
+ inj));
216
+ od;
217
+
218
+ i := 0;
219
+ while Size(U) <> Size(I) do
220
+ i := i + 1;
221
+ j := 0;
222
+ while Size(U) <> Size(I) and j < Length(partial[i]) do
223
+ j := j + 1;
224
+ if Length(partial[i]) = 1 or partial[i][j] <> i then
225
+ C := D[partial[i][j]];
226
+ inj := InverseGeneralMapping(InjectionPrincipalFactor(C));
227
+ gens := GeneratorsOfSemigroup(Source(inj));
228
+ U := ClosureInverseSemigroup(U, OnTuples(gens, inj));
229
+ fi;
230
+ od;
231
+ od;
232
+
233
+ return GeneratorsOfSemigroup(U);
234
+ end);
235
+
236
+ InstallMethod(GeneratorsOfInverseSemigroup,
237
+ "for an inverse acting semigroup ideal rep",
238
+ [IsInverseActingSemigroupRep and IsSemigroupIdeal],
239
+ function(I)
240
+ local U, i, partial, D, pos, inj, gens, j, C;
241
+
242
+ if HasGeneratorsOfSemigroup(I) then
243
+ return GeneratorsOfSemigroup(I);
244
+ fi;
245
+
246
+ Info(InfoWarning, 2, "finding a generating set of a semigroup ideal!");
247
+
248
+ # find generators for I...
249
+ U := InverseSemigroup(GeneratorsOfSemigroupIdeal(I));
250
+ partial := OutNeighbours(PartialOrderOfDClasses(I));
251
+ D := GreensDClasses(I);
252
+
253
+ # positions of the D-classes containing generators of the ideal...
254
+ pos := Set(GeneratorsOfSemigroupIdeal(I),
255
+ x -> OrbSCCLookup(LambdaOrb(I))[Position(LambdaOrb(I),
256
+ LambdaFunc(I)(x))] - 1);
257
+
258
+ for i in pos do
259
+ inj := InverseGeneralMapping(InjectionPrincipalFactor(D[i]));
260
+ gens := GeneratorsOfSemigroup(Source(inj));
261
+ U := ClosureInverseSemigroup(U, OnTuples(gens, inj));
262
+ od;
263
+
264
+ i := 0;
265
+
266
+ while Size(U) <> Size(I) do
267
+ i := i + 1;
268
+ j := 0;
269
+ while Size(U) <> Size(I) and j < Length(partial[i]) do
270
+ j := j + 1;
271
+ if Length(partial[i]) = 1 or partial[i][j] <> i then
272
+ C := D[partial[i][j]];
273
+ inj := InverseGeneralMapping(InjectionPrincipalFactor(C));
274
+ gens := GeneratorsOfSemigroup(Source(inj));
275
+ U := ClosureInverseSemigroup(U, OnTuples(gens, inj));
276
+ fi;
277
+ od;
278
+ od;
279
+
280
+ return GeneratorsOfInverseSemigroup(U);
281
+ end);
282
+
283
+ # this could be simpler for ideals which know they are regular a priori.
284
+
285
+ InstallMethod(SemigroupIdealData, "for an acting semigroup ideal",
286
+ [IsActingSemigroup and IsSemigroupIdeal],
287
+ function(I)
288
+ local S, gens, data, filt;
289
+
290
+ S := SupersemigroupOfIdeal(I);
291
+ gens := GeneratorsOfSemigroup(S);
292
+ if IsActingSemigroup(S) then
293
+ gens := List(gens, x -> ConvertToInternalElement(S, x));
294
+ fi;
295
+
296
+ data := rec();
297
+ data.gens := gens;
298
+ data.parent := I;
299
+ data.log := [1];
300
+ data.genspos := 0;
301
+ data.ht := HTCreate(gens[1], rec(treehashsize :=
302
+ SEMIGROUPS.OptionsRec(I).hashlen));
303
+ data.pos := 0;
304
+ data.init := false;
305
+ data.reps := [];
306
+ data.repslookup := [];
307
+ data.orblookup1 := [];
308
+ data.orblookup2 := [];
309
+ data.rholookup := [fail];
310
+ data.lenreps := [0];
311
+ data.orbit := [fail];
312
+ data.dorbit := [];
313
+ data.repslens := [];
314
+ data.lambdarhoht := [];
315
+ data.regular := [];
316
+ data.genstoapply := [1 .. Length(gens)];
317
+ data.stopper := false;
318
+ data.poset := [];
319
+ data.scc_lookup := [];
320
+
321
+ if HasIsRegularSemigroup(I) and IsRegularSemigroup(I) then
322
+ filt := IsRegularIdealData;
323
+ else
324
+ filt := IsSemigroupIdealData;
325
+ fi;
326
+ Objectify(NewType(FamilyObj(I), filt), data);
327
+
328
+ return data;
329
+ end);
330
+
331
+ InstallMethod(SemigroupIdealData,
332
+ "for an inverse acting semigroup rep ideal",
333
+ [IsInverseActingSemigroupRep and IsSemigroupIdeal],
334
+ ReturnFail);
335
+
336
+ InstallMethod(ViewObj, [IsSemigroupIdealData],
337
+ function(data)
338
+ Print("<");
339
+ if IsClosedData(data) then
340
+ Print("closed ");
341
+ else
342
+ Print("open ");
343
+ fi;
344
+ Print("semigroup ideal ");
345
+
346
+ Print("data with ", Length(data!.orbit) - 1, " reps, ",
347
+ Length(LambdaOrb(data!.parent)) - 1, " lambda-values, ",
348
+ Length(RhoOrb(data!.parent)) - 1, " rho-values>");
349
+ return;
350
+ end);
351
+
352
+ InstallMethod(Enumerate, "for semigroup ideal data, limit, looking function",
353
+ [IsSemigroupIdealData, IsCyclotomic, IsFunction],
354
+ {data, limit, lookfunc} -> Enumerate(data, limit, rec(lookfunc := lookfunc)));
355
+
356
+ # We concentrate on the case when nothing is known about the parent of the
357
+ # ideal.
358
+
359
+ # we make the R-class centered data structure as in SemigroupIdealData but at
360
+ # the same time have an additional "orbit" consisting of D-class reps.
361
+
362
+ InstallMethod(Enumerate,
363
+ "for semigroup ideal data, limit, and record",
364
+ [IsSemigroupIdealData, IsCyclotomic, IsRecord],
365
+ function(data, limit, record)
366
+ local lookfunc, looking, lambdalookfunc, lambdalooking, rholookfunc,
367
+ rholooking, ht, orb, nr_r, d, nr_d, reps, repslens, lenreps, lambdarhoht,
368
+ repslookup, orblookup1, orblookup2, rholookup, stopper, gens, genstoapply, I,
369
+ lambda, lambdao, lambdaoht, lambdalookup, lambdascc, lenscc, lambdaperm, rho,
370
+ rhoo, rhooht, rhoolookup, rhoscc, act, htadd, htvalue, drel, dtype, poset,
371
+ datalookup, log, tester, regular, UpdateSemigroupIdealData, idealgens, i, x,
372
+ rreps, pos, j, k, z;
373
+
374
+ if IsBound(record.lookfunc) and not record.lookfunc <> ReturnFalse then
375
+ lookfunc := record.lookfunc;
376
+ looking := true;
377
+ data!.found := false;
378
+ else
379
+ looking := false;
380
+ fi;
381
+
382
+ if IsBound(record.lambdalookfunc) then
383
+ lambdalookfunc := record.lambdalookfunc;
384
+ lambdalooking := true;
385
+ else
386
+ lambdalookfunc := ReturnFalse;
387
+ lambdalooking := false;
388
+ fi;
389
+
390
+ if IsBound(record.rholookfunc) then
391
+ rholookfunc := record.rholookfunc;
392
+ rholooking := true;
393
+ else
394
+ rholookfunc := ReturnFalse;
395
+ rholooking := false;
396
+ fi;
397
+
398
+ if IsClosedData(data) then
399
+ if looking then
400
+ data!.found := false;
401
+ fi;
402
+ return data;
403
+ fi;
404
+
405
+ data!.looking := looking;
406
+
407
+ ht := data!.ht; # so far found R-reps
408
+ orb := data!.orbit; # the so far found R-reps data
409
+ nr_r := Length(orb);
410
+ d := data!.dorbit; # the so far found D-classes
411
+ nr_d := Length(d);
412
+ reps := data!.reps; # reps grouped by equal lambda-scc-index and
413
+ # rho-value-index
414
+
415
+ repslens := data!.repslens; # Length(reps[m][i])=repslens[m][i]
416
+ lenreps := data!.lenreps; # lenreps[m]=Length(reps[m])
417
+
418
+ lambdarhoht := data!.lambdarhoht;
419
+ # HTValue(lambdarhoht, [m,l])=position in reps[m]
420
+ # of R-reps with lambda-scc-index=m and
421
+ # rho-value-index=l
422
+
423
+ repslookup := data!.repslookup; # Position(orb, reps[m][i][j])
424
+ # = repslookup[m][i][j]
425
+ # = HTValue(ht, reps[m][i][j])
426
+
427
+ orblookup1 := data!.orblookup1; # orblookup1[i] position in reps[m]
428
+ # containing orb[i][4] (the R-rep)
429
+
430
+ orblookup2 := data!.orblookup2; # orblookup2[i] position in
431
+ # reps[m][orblookup1[i]]
432
+ # containing orb[i][4] (the R-rep)
433
+
434
+ rholookup := data!.rholookup; # rholookup[i]=rho-value-index of orb[i][4]
435
+
436
+ stopper := data!.stopper; # stop at this place in the orbit
437
+
438
+ # generators
439
+ gens := data!.gens; # generators of the parent semigroup
440
+ genstoapply := data!.genstoapply;
441
+
442
+ I := data!.parent;
443
+
444
+ # lambda
445
+ lambda := LambdaFunc(I);
446
+ lambdao := LambdaOrb(I);
447
+ lambdaoht := lambdao!.ht;
448
+ lambdalookup := lambdao!.scc_lookup;
449
+ lambdascc := OrbSCC(lambdao);
450
+ lenscc := Length(lambdascc);
451
+
452
+ lambdaperm := LambdaPerm(I);
453
+
454
+ # rho
455
+ rho := RhoFunc(I);
456
+ rhoo := RhoOrb(I);
457
+ rhooht := rhoo!.ht;
458
+ rhoolookup := rhoo!.scc_lookup;
459
+ rhoscc := OrbSCC(rhoo);
460
+
461
+ act := StabilizerAction(I);
462
+
463
+ if IsBoundGlobal("ORBC") then
464
+ htadd := HTAdd_TreeHash_C;
465
+ htvalue := HTValue_TreeHash_C;
466
+ else
467
+ htadd := HTAdd;
468
+ htvalue := HTValue;
469
+ fi;
470
+
471
+ # new stuff
472
+ drel := GreensDRelation(I);
473
+ dtype := DClassType(I);
474
+
475
+ poset := data!.poset; # the D-class poset
476
+ datalookup := data!.scc_lookup;
477
+
478
+ log := data!.log;
479
+ # log[i+1] is the last position in orb=data!.orbit where the R-class reps
480
+ # of d[i] appear...
481
+
482
+ tester := IdempotentTester(I);
483
+ regular := data!.regular;
484
+
485
+ #############################################################################
486
+
487
+ # the function which checks if x is already R/D-related to something in the
488
+ # data and if not adds it in the appropriate place
489
+
490
+ UpdateSemigroupIdealData := function(x, pos, gen, idealpos)
491
+ local new, xx, l, m, mm, schutz, mults, cosets, y, n, z, ind, val;
492
+ new := false;
493
+
494
+ # check, update, rectify the lambda value
495
+ xx := lambda(x);
496
+ l := htvalue(lambdaoht, xx);
497
+ if l = fail then
498
+ l := UpdateIdealLambdaOrb(lambdao, xx, x, pos, gen, idealpos,
499
+ lambdalookfunc);
500
+
501
+ # update the lists of reps
502
+ for n in [lenscc + 1 .. lenscc + Length(lambdascc)] do
503
+ reps[n] := [];
504
+ repslookup[n] := [];
505
+ repslens[n] := [];
506
+ lenreps[n] := 0;
507
+ lenscc := Length(lambdascc);
508
+ od;
509
+ new := true; # x is a new R-rep
510
+ fi;
511
+ m := lambdalookup[l];
512
+ if l <> lambdascc[m][1] then
513
+ x := x * LambdaOrbMult(lambdao, m, l)[2];
514
+ fi;
515
+
516
+ # check if x is identical to one of the known R-reps
517
+ if not new then
518
+ val := htvalue(ht, x);
519
+ if val <> fail then
520
+ if pos <> fail then # we are multiplying the <i>th D-rep by a generator
521
+ AddSet(poset[i], datalookup[val]);
522
+ fi;
523
+ return; # x is one of the old R-reps
524
+ fi;
525
+ fi;
526
+
527
+ # check, update, rectify the rho value
528
+ xx := rho(x);
529
+ l := htvalue(rhooht, xx);
530
+ if l = fail then
531
+ l := UpdateIdealRhoOrb(rhoo, xx, x, pos, gen, idealpos, rholookfunc);
532
+ new := true; # x is a new R-rep
533
+ fi;
534
+ schutz := LambdaOrbStabChain(lambdao, m);
535
+
536
+ # check if x is R-related to one of the known R-reps
537
+ if not new and schutz <> false and IsBound(lambdarhoht[l])
538
+ and IsBound(lambdarhoht[l][m]) then
539
+ # if schutz=false or these are not bound, then x is a new R-rep
540
+
541
+ ind := lambdarhoht[l][m];
542
+ if schutz = true then
543
+ if pos <> fail then
544
+ AddSet(poset[i], datalookup[repslookup[m][ind][1]]);
545
+ fi;
546
+ return;
547
+ fi;
548
+
549
+ for n in [1 .. repslens[m][ind]] do
550
+ if SchutzGpMembership(I)(schutz, lambdaperm(reps[m][ind][n], x)) then
551
+ if pos <> fail then
552
+ AddSet(poset[i], datalookup[repslookup[m][ind][n]]);
553
+ fi;
554
+ return; # x is on of the old R-reps
555
+ fi;
556
+ od;
557
+ fi;
558
+
559
+ # if we reach here, then x is a new R-rep, and hence a new D-rep
560
+ mm := rhoolookup[l];
561
+ if l <> rhoscc[mm][1] then
562
+ x := RhoOrbMult(rhoo, mm, l)[2] * x;
563
+ fi;
564
+
565
+ nr_d := nr_d + 1;
566
+ d[nr_d] := rec(rep := x);
567
+ ObjectifyWithAttributes(d[nr_d], dtype,
568
+ ParentAttr, I,
569
+ EquivalenceClassRelation, drel,
570
+ IsGreensClassNC, false,
571
+ Representative, ConvertToExternalElement(I, x),
572
+ LambdaOrb, lambdao,
573
+ LambdaOrbSCCIndex, m,
574
+ RhoOrb, rhoo,
575
+ RhoOrbSCCIndex, mm,
576
+ RhoOrbSCC, rhoscc[mm]);
577
+ regular[nr_d] := false;
578
+
579
+ # install the point in the poset
580
+
581
+ if pos <> fail then
582
+ AddSet(poset[i], nr_d);
583
+ fi;
584
+
585
+ # install the R-class reps of the new D-rep
586
+ mults := RhoOrbMults(rhoo, mm);
587
+ cosets := RhoCosets(d[nr_d]);
588
+
589
+ for l in rhoscc[mm] do # install the R-class reps
590
+ if not IsBound(lambdarhoht[l]) then
591
+ lambdarhoht[l] := [];
592
+ fi;
593
+ if not IsBound(lambdarhoht[l][m]) then
594
+ lenreps[m] := lenreps[m] + 1;
595
+ ind := lenreps[m];
596
+ lambdarhoht[l][m] := ind;
597
+ repslens[m][ind] := 0;
598
+ reps[m][ind] := [];
599
+ repslookup[m][ind] := [];
600
+ else
601
+ ind := lambdarhoht[l][m];
602
+ if not HasIsRegularSemigroup(I) then
603
+ SetIsRegularSemigroup(I, false);
604
+ fi;
605
+ fi;
606
+ if not HasIsRegularSemigroup(I) and not regular[nr_d] then
607
+ regular[nr_d] := tester(lambdao[lambdascc[m][1]], rhoo[l]);
608
+ fi;
609
+ y := mults[l][1] * x;
610
+
611
+ for z in cosets do
612
+ nr_r := nr_r + 1;
613
+
614
+ repslens[m][ind] := repslens[m][ind] + 1;
615
+ reps[m][ind][repslens[m][ind]] := act(y, z ^ -1);
616
+ repslookup[m][ind][repslens[m][ind]] := nr_r;
617
+ orblookup1[nr_r] := ind;
618
+ orblookup2[nr_r] := repslens[m][ind];
619
+ rholookup[nr_r] := l;
620
+ datalookup[nr_r] := nr_d;
621
+
622
+ orb[nr_r] := [I, m, lambdao, reps[m][ind][repslens[m][ind]],
623
+ false, nr_r];
624
+ htadd(ht, reps[m][ind][repslens[m][ind]], nr_r);
625
+
626
+ if looking then
627
+ # did we find it?
628
+ if lookfunc(data, orb[nr_r]) then
629
+ data!.found := nr_r;
630
+ fi;
631
+ fi;
632
+
633
+ od;
634
+ od;
635
+ log[nr_d + 1] := nr_r;
636
+ end;
637
+ #############################################################################
638
+
639
+ # initialise the data if necessary
640
+ if data!.init = false then
641
+ # add the generators of the ideal...
642
+ idealgens := List(GeneratorsOfSemigroupIdeal(I),
643
+ x -> ConvertToInternalElement(I, x));
644
+ for i in [1 .. Length(idealgens)] do
645
+ UpdateSemigroupIdealData(idealgens[i], fail, fail, i);
646
+ od;
647
+
648
+ data!.init := true;
649
+ data!.genspos := nr_d + 1;
650
+ fi;
651
+
652
+ i := data!.pos; # points in orb in position at most i have descendants
653
+
654
+ while nr_d <= limit and i < nr_d and i <> stopper do
655
+ i := i + 1; # advance in the dorb
656
+ poset[i] := [];
657
+ x := Representative(d[i]);
658
+
659
+ # left multiply the R-class reps by the generators of the semigroup
660
+ rreps := [];
661
+ pos := Position(lambdao, lambda(x));
662
+ for j in [log[i] + 1 .. log[i + 1]] do # the R-class reps of d[i]
663
+ rreps[j - log[i]] := orb[j][4];
664
+ for k in genstoapply do
665
+ UpdateSemigroupIdealData(gens[k] * orb[j][4], pos, k, fail);
666
+ if (looking and data!.found <> false)
667
+ or (lambdalooking and lambdao!.found <> false)
668
+ or (rholooking and rhoo!.found <> false) then
669
+ data!.pos := i - 1;
670
+ return data;
671
+ fi;
672
+ od;
673
+ od;
674
+ SetRClassReps(d[i], rreps);
675
+
676
+ # right multiply the L-class reps by the generators of the semigroup
677
+ pos := Position(rhoo, rho(x));
678
+ for z in LClassReps(d[i]) do
679
+ for k in genstoapply do
680
+ UpdateSemigroupIdealData(z * gens[k], pos, k, fail);
681
+ if (looking and data!.found <> false)
682
+ or (lambdalooking and lambdao!.found <> false)
683
+ or (rholooking and rhoo!.found <> false) then
684
+ data!.pos := i - 1;
685
+ return data;
686
+ fi;
687
+ od;
688
+ od;
689
+ od;
690
+
691
+ # for the data-orbit
692
+ data!.pos := i;
693
+
694
+ if nr_d = i then
695
+ SetFilterObj(lambdao, IsClosedOrbit);
696
+ SetFilterObj(rhoo, IsClosedOrbit);
697
+ SetFilterObj(data, IsClosedData);
698
+ if not HasIsRegularSemigroup(I) then
699
+ SetIsRegularSemigroup(I, ForAll(regular, x -> x));
700
+ fi;
701
+ if IsRegularSemigroup(I) then
702
+ SetFilterObj(I, IsRegularActingSemigroupRep);
703
+ SetGreensDClasses(I, d);
704
+ fi;
705
+ fi;
706
+ return data;
707
+ end);
708
+
709
+ # TODO(FixExtremeTests): use ConvertToInternalElement here
710
+
711
+ InstallMethod(\in,
712
+ "for a multiplicative element and regular acting semigroup ideal",
713
+ [IsMultiplicativeElement,
714
+ IsSemigroupIdeal and IsRegularActingSemigroupRep],
715
+ function(x, I)
716
+ local data, ht, xx, o, l, lookfunc, m, lambdarhoht,
717
+ schutz, ind, reps;
718
+
719
+ if IsInverseActingSemigroupRep(I) then
720
+ TryNextMethod();
721
+ elif ElementsFamily(FamilyObj(I)) <> FamilyObj(x)
722
+ or (IsActingSemigroupWithFixedDegreeMultiplication(I)
723
+ and ActionDegree(x) <> ActionDegree(I))
724
+ or (ActionDegree(x) > ActionDegree(I)) then
725
+ return false;
726
+ elif ActionRank(I)(x) >
727
+ MaximumList(List(Generators(I), y -> ActionRank(I)(y))) then
728
+ Info(InfoSemigroups, 2, "element has larger rank than any element of ",
729
+ "semigroup.");
730
+ return false;
731
+ elif HasMinimalIdeal(I) then
732
+ if ActionRank(I)(x) < ActionRank(I)(Representative(MinimalIdeal(I))) then
733
+ Info(InfoSemigroups, 2, "element has smaller rank than any element of ",
734
+ "semigroup.");
735
+ return false;
736
+ fi;
737
+ fi;
738
+
739
+ data := SemigroupIdealData(I);
740
+ ht := data!.ht;
741
+
742
+ # look for lambda!
743
+ xx := LambdaFunc(I)(x);
744
+ o := LambdaOrb(I);
745
+
746
+ l := Position(o, xx);
747
+
748
+ if l = fail then
749
+ if IsClosedOrbit(o) then
750
+ return false;
751
+ fi;
752
+
753
+ # this function checks if <pt> has the same lambda-value as x
754
+ lookfunc := {lambdao, pt} -> pt = xx;
755
+ Enumerate(data, infinity, rec(lambdalookfunc := lookfunc));
756
+ l := PositionOfFound(o);
757
+
758
+ # rho is not found, so f not in s
759
+ if l = false then
760
+ return false;
761
+ fi;
762
+ l := Position(o, xx);
763
+ fi;
764
+
765
+ # strongly connected component of lambda orb
766
+ m := OrbSCCLookup(o)[l];
767
+
768
+ # make sure lambda of <x> is in the first place of its scc
769
+ if l <> OrbSCC(o)[m][1] then
770
+ x := x * LambdaOrbMult(o, m, l)[2];
771
+ fi;
772
+
773
+ schutz := LambdaOrbStabChain(o, m);
774
+
775
+ # check if <x> is an existing R-rep
776
+ if HTValue(ht, x) <> fail then
777
+ return true;
778
+ elif schutz = false then
779
+ # If <x> in <I> and the Schutz gp is trivial, then <x> is an R-class rep.
780
+ # Since we have found the D-class containing an element of <I> with the
781
+ # same lambda-val as <x>, we have found all of the R-class reps of <I>
782
+ # with the same lambda-val as <x>, and so we should have found <x>. We
783
+ # didn't and so <x> is not in <I>.
784
+ return false;
785
+ fi;
786
+
787
+ # look for rho!
788
+ o := RhoOrb(I);
789
+ l := Position(o, RhoFunc(I)(x));
790
+
791
+ if l = fail then
792
+ Assert(1, IsClosedOrbit(o));
793
+ # Because I is regular once we have found the lambda-val we have found the
794
+ # (unique) D-class of I containing something with the same lambda-val. If x
795
+ # in I, then the D-class we've found must contain x and so we already know
796
+ # the rho-val. So, if l = fail, then x is not in I.
797
+ return false;
798
+ fi;
799
+
800
+ lambdarhoht := data!.lambdarhoht;
801
+
802
+ # look for the R-class rep
803
+ if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
804
+ # lambda-rho-combination not yet seen
805
+ if IsClosedData(data) then
806
+ return false;
807
+ fi;
808
+
809
+ lookfunc := {d, x} -> IsBound(lambdarhoht[l])
810
+ and IsBound(lambdarhoht[l][m]);
811
+ data := Enumerate(data, infinity, lookfunc);
812
+ if not IsBound(lambdarhoht[l]) or not IsBound(lambdarhoht[l][m]) then
813
+ return false;
814
+ fi;
815
+ fi;
816
+
817
+ ind := lambdarhoht[l][m];
818
+ # the index of the list of reps with same lambda-rho value as <x>.
819
+ # Note that since <I> is regular, there is only one such rep at most.
820
+
821
+ reps := data!.reps;
822
+
823
+ # if the Schutzenberger group is the symmetric group, then <x> in <I>!
824
+ if schutz = true then
825
+ return true;
826
+ fi;
827
+ Assert(1, schutz <> false);
828
+ return SchutzGpMembership(I)(schutz, LambdaPerm(I)(reps[m][ind][1], x));
829
+ end);
830
+
831
+ # JDM; this method could be removed later...
832
+
833
+ InstallMethod(Size, "for an acting semigroup ideal",
834
+ [IsActingSemigroup and IsSemigroupIdeal],
835
+ function(s)
836
+ local data, lenreps, repslens, o, scc, size, n, m, i;
837
+
838
+ data := Enumerate(SemigroupIdealData(s), infinity, ReturnFalse);
839
+ lenreps := data!.lenreps;
840
+ repslens := data!.repslens;
841
+ o := LambdaOrb(s);
842
+ scc := OrbSCC(o);
843
+
844
+ size := 0;
845
+
846
+ for m in [2 .. Length(scc)] do
847
+ n := Size(LambdaOrbSchutzGp(o, m)) * Length(scc[m]);
848
+ for i in [1 .. lenreps[m]] do
849
+ size := size + n * repslens[m][i];
850
+ od;
851
+ od;
852
+
853
+ return size;
854
+ end);
855
+
856
+ InstallMethod(Enumerate,
857
+ "for regular ideal data, limit, and func",
858
+ [IsRegularIdealData, IsCyclotomic, IsRecord],
859
+ function(data, limit, record)
860
+ local lookfunc, looking, lambdalookfunc, lambdalooking, rholookfunc,
861
+ rholooking, ht, orb, nr_r, d, nr_d, reps, repslens, lenreps, lambdarhoht,
862
+ repslookup, orblookup1, orblookup2, rholookup, stopper, gens, genstoapply, I,
863
+ lambda, lambdao, lambdaoht, lambdalookup, lambdascc, lenscc, rho, rhoo,
864
+ rhooht, rhoolookup, rhoscc, rholen, htadd, htvalue, drel, dtype, poset,
865
+ datalookup, log, UpdateSemigroupIdealData, idealgens, i, x, rreps, pos, j, k,
866
+ z;
867
+
868
+ if IsBound(record.lookfunc) and record.lookfunc <> ReturnFalse then
869
+ lookfunc := record.lookfunc;
870
+ looking := true;
871
+ data!.found := false;
872
+ else
873
+ looking := false;
874
+ fi;
875
+
876
+ if IsBound(record.lambdalookfunc) then
877
+ lambdalookfunc := record.lambdalookfunc;
878
+ lambdalooking := true;
879
+ else
880
+ lambdalookfunc := ReturnFalse;
881
+ lambdalooking := false;
882
+ fi;
883
+
884
+ if IsBound(record.rholookfunc) then
885
+ rholookfunc := record.rholookfunc;
886
+ rholooking := true;
887
+ else
888
+ rholookfunc := ReturnFalse;
889
+ rholooking := false;
890
+ fi;
891
+
892
+ if IsClosedData(data) then
893
+ if looking then
894
+ data!.found := false;
895
+ fi;
896
+ return data;
897
+ fi;
898
+
899
+ data!.looking := looking;
900
+
901
+ ht := data!.ht; # so far found R-reps
902
+ orb := data!.orbit; # the so far found R-reps data
903
+ nr_r := Length(orb);
904
+ d := data!.dorbit; # the so far found D-classes
905
+ nr_d := Length(d);
906
+ reps := data!.reps;
907
+ # reps grouped by equal lambda-scc-index and rho-value-index
908
+
909
+ repslens := data!.repslens; # Length(reps[m][i])=repslens[m][i]
910
+ lenreps := data!.lenreps; # lenreps[m]=Length(reps[m])
911
+
912
+ lambdarhoht := data!.lambdarhoht;
913
+ # HTValue(lambdarhoht, [m,l])=position in
914
+ # reps[m] of R-reps with lambda-scc-index=m
915
+ # and rho-value-index=l
916
+
917
+ repslookup := data!.repslookup; # Position(orb, reps[m][i][j])
918
+ # = repslookup[m][i][j]
919
+ # = HTValue(ht, reps[m][i][j])
920
+
921
+ orblookup1 := data!.orblookup1; # orblookup1[i] position in reps[m]
922
+ # containing orb[i][4] (the R-rep)
923
+
924
+ orblookup2 := data!.orblookup2; # orblookup2[i] position in
925
+ # reps[m][orblookup1[i]]
926
+ # containing orb[i][4] (the R-rep)
927
+
928
+ rholookup := data!.rholookup; # rholookup[i]=rho-value-index of orb[i][4]
929
+
930
+ stopper := data!.stopper; # stop at this place in the orbit
931
+
932
+ # generators
933
+ gens := data!.gens; # generators of the parent semigroup
934
+ genstoapply := data!.genstoapply;
935
+
936
+ I := data!.parent;
937
+
938
+ # lambda
939
+ lambda := LambdaFunc(I);
940
+ lambdao := LambdaOrb(I);
941
+ lambdaoht := lambdao!.ht;
942
+ lambdalookup := lambdao!.scc_lookup;
943
+ lambdascc := OrbSCC(lambdao);
944
+ lenscc := Length(lambdascc);
945
+
946
+ # rho
947
+ rho := RhoFunc(I);
948
+ rhoo := RhoOrb(I);
949
+ rhooht := rhoo!.ht;
950
+ rhoolookup := rhoo!.scc_lookup;
951
+ rhoscc := OrbSCC(rhoo);
952
+ rholen := Length(rhoo);
953
+
954
+ if IsBoundGlobal("ORBC") then
955
+ htadd := HTAdd_TreeHash_C;
956
+ htvalue := HTValue_TreeHash_C;
957
+ else
958
+ htadd := HTAdd;
959
+ htvalue := HTValue;
960
+ fi;
961
+
962
+ # new stuff
963
+ drel := GreensDRelation(I);
964
+ dtype := DClassType(I);
965
+
966
+ poset := data!.poset; # the D-class poset
967
+ datalookup := data!.scc_lookup;
968
+
969
+ log := data!.log;
970
+ # log[i+1] is the last position in orb=data!.orbit where the
971
+ # R-class reps of d[i] appear...
972
+
973
+ #############################################################################
974
+
975
+ # the function which checks if x is already R/D-related to something in the
976
+ # data and if not adds it in the appropriate place
977
+
978
+ UpdateSemigroupIdealData := function(x, pos, gen, idealpos)
979
+ local new, xx, l, m, mm, schutz, mults, y, n, ind, val;
980
+ new := false;
981
+
982
+ # check, update, rectify the lambda value
983
+ xx := lambda(x);
984
+ l := htvalue(lambdaoht, xx);
985
+ if l = fail then
986
+ l := UpdateIdealLambdaOrb(lambdao, xx, x, pos, gen, idealpos,
987
+ lambdalookfunc);
988
+
989
+ # update the lists of reps
990
+ for n in [lenscc + 1 .. lenscc + Length(lambdascc)] do
991
+ reps[n] := [];
992
+ repslookup[n] := [];
993
+ repslens[n] := [];
994
+ lenreps[n] := 0;
995
+ lenscc := Length(lambdascc);
996
+ od;
997
+ new := true; # x is a new R-rep
998
+ fi;
999
+ m := lambdalookup[l];
1000
+ if l <> lambdascc[m][1] then
1001
+ x := x * LambdaOrbMult(lambdao, m, l)[2];
1002
+ fi;
1003
+
1004
+ # check if x is identical to one of the known R-reps
1005
+ if not new then
1006
+ val := htvalue(ht, x);
1007
+ if val <> fail then
1008
+ if pos <> fail then # we are multiplying the <i>th D-rep by a generator
1009
+ AddSet(poset[i], datalookup[val]);
1010
+ fi;
1011
+ return; # x is one of the old R-reps
1012
+ fi;
1013
+ fi;
1014
+
1015
+ # check, update, rectify the rho value
1016
+ xx := rho(x);
1017
+ l := htvalue(rhooht, xx);
1018
+ if l = fail then
1019
+ l := UpdateIdealRhoOrb(rhoo, xx, x, pos, gen, idealpos, rholookfunc);
1020
+ for n in [rholen + 1 .. rholen + Length(rhoo)] do
1021
+ lambdarhoht[n] := [];
1022
+ od;
1023
+ rholen := Length(rhoo);
1024
+ new := true; # x is a new R-rep
1025
+ fi;
1026
+ schutz := LambdaOrbStabChain(lambdao, m);
1027
+
1028
+ # check if x is R-related to one of the known R-reps
1029
+ if not new and schutz <> false and IsBound(lambdarhoht[l][m]) then
1030
+ ind := lambdarhoht[l][m];
1031
+ if pos <> fail then
1032
+ AddSet(poset[i], datalookup[repslookup[m][ind][1]]);
1033
+ fi;
1034
+ return;
1035
+ fi;
1036
+
1037
+ # if we reach here, then x is a new R-rep, and hence a new D-rep
1038
+ mm := rhoolookup[l];
1039
+ if l <> rhoscc[mm][1] then
1040
+ x := RhoOrbMult(rhoo, mm, l)[2] * x;
1041
+ fi;
1042
+
1043
+ nr_d := nr_d + 1;
1044
+ d[nr_d] := rec(rep := x);
1045
+ ObjectifyWithAttributes(d[nr_d], dtype,
1046
+ ParentAttr, I,
1047
+ EquivalenceClassRelation, drel,
1048
+ IsGreensClassNC, false,
1049
+ Representative, ConvertToExternalElement(I, x),
1050
+ LambdaOrb, lambdao,
1051
+ LambdaOrbSCCIndex, m,
1052
+ RhoOrb, rhoo,
1053
+ RhoOrbSCCIndex, mm,
1054
+ RhoOrbSCC, rhoscc[mm]);
1055
+
1056
+ # install the point in the poset
1057
+ if pos <> fail then
1058
+ AddSet(poset[i], nr_d);
1059
+ fi;
1060
+
1061
+ # install the R-class reps of the new D-rep
1062
+ mults := RhoOrbMults(rhoo, mm);
1063
+
1064
+ for l in rhoscc[mm] do # install the R-class reps
1065
+ nr_r := nr_r + 1;
1066
+ y := mults[l][1] * x;
1067
+ orb[nr_r] := [I, m, lambdao, y, false, nr_r];
1068
+ htadd(ht, y, nr_r);
1069
+
1070
+ lenreps[m] := lenreps[m] + 1;
1071
+ ind := lenreps[m];
1072
+ lambdarhoht[l][m] := ind; # this can't have been seen before
1073
+ reps[m][ind] := [y];
1074
+ repslookup[m][ind] := [nr_r];
1075
+ repslens[m][ind] := 1;
1076
+ orblookup1[nr_r] := ind;
1077
+ orblookup2[nr_r] := 1;
1078
+ rholookup[nr_r] := l;
1079
+ datalookup[nr_r] := nr_d;
1080
+
1081
+ if looking then
1082
+ # did we find it?
1083
+ if lookfunc(data, orb[nr_r]) then
1084
+ data!.found := nr_r;
1085
+ fi;
1086
+ fi;
1087
+
1088
+ od;
1089
+ log[nr_d + 1] := nr_r;
1090
+ end;
1091
+ #############################################################################
1092
+
1093
+ # initialise the data if necessary
1094
+ if data!.init = false then
1095
+ # add the generators of the ideal...
1096
+ idealgens := List(GeneratorsOfSemigroupIdeal(I),
1097
+ x -> ConvertToInternalElement(I, x));
1098
+ for i in [1 .. Length(idealgens)] do
1099
+ UpdateSemigroupIdealData(idealgens[i], fail, fail, i);
1100
+ od;
1101
+
1102
+ data!.init := true;
1103
+ data!.genspos := nr_d + 1;
1104
+ fi;
1105
+
1106
+ i := data!.pos; # points in orb in position at most i have descendants
1107
+
1108
+ while nr_d <= limit and i < nr_d and i <> stopper do
1109
+ i := i + 1; # advance in the dorb
1110
+ poset[i] := [];
1111
+ x := Representative(d[i]);
1112
+
1113
+ # left multiply the R-class reps by the generators of the semigroup
1114
+ rreps := [];
1115
+ pos := Position(lambdao, lambda(x));
1116
+ for j in [log[i] + 1 .. log[i + 1]] do # the R-class reps of d[i]
1117
+ rreps[j - log[i]] := orb[j][4];
1118
+ for k in genstoapply do
1119
+ UpdateSemigroupIdealData(gens[k] * orb[j][4], pos, k, fail);
1120
+ if (looking and data!.found <> false)
1121
+ or (lambdalooking and lambdao!.found <> false)
1122
+ or (rholooking and rhoo!.found <> false) then
1123
+ data!.pos := i - 1;
1124
+ return data;
1125
+ fi;
1126
+ od;
1127
+ od;
1128
+ SetRClassReps(d[i], rreps);
1129
+
1130
+ # right multiply the L-class reps by the generators of the semigroup
1131
+ pos := Position(rhoo, rho(x));
1132
+ for z in LClassReps(d[i]) do
1133
+ for k in genstoapply do
1134
+ UpdateSemigroupIdealData(z * gens[k], pos, k, fail);
1135
+ if (looking and data!.found <> false)
1136
+ or (lambdalooking and lambdao!.found <> false)
1137
+ or (rholooking and rhoo!.found <> false) then
1138
+ data!.pos := i - 1;
1139
+ return data;
1140
+ fi;
1141
+ od;
1142
+ od;
1143
+ od;
1144
+
1145
+ # for the data-orbit
1146
+ data!.pos := i;
1147
+
1148
+ if nr_d = i then
1149
+ SetFilterObj(lambdao, IsClosedOrbit);
1150
+ SetFilterObj(rhoo, IsClosedOrbit);
1151
+ SetFilterObj(data, IsClosedData);
1152
+ fi;
1153
+
1154
+ return data;
1155
+ end);