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

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

Potentially problematic release.


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

Files changed (356) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/x86_64-pc-linux-musl-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1068 -0
  17. gap/pkg/semigroups/config.status +1133 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +356 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +5 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libgcc_s-0cd532bd.so.1 +0 -0
  352. passagemath_gap_pkg_semigroups.libs/libsemigroups-f0b7066b.so.2.0.0 +0 -0
  353. passagemath_gap_pkg_semigroups.libs/libstdc++-5d72f927.so.6.0.33 +0 -0
  354. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  355. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  356. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,11 @@
1
+ ###########################################################################
2
+ ##
3
+ ## ideals/froidure-pin.gd
4
+ ## Copyright (C) 2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ DeclareAttribute("PositionsInSupersemigroup", IsSemigroupIdeal);
@@ -0,0 +1,105 @@
1
+ ###########################################################################
2
+ ##
3
+ ## ideals/froidure-pin.gi
4
+ ## Copyright (C) 2014-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ # This file contains method specific to ideals of semigroups.
12
+
13
+ # We use the result of running the Froidure-Pin algorithm on the supersemigroup
14
+ # of an ideal to calculate elements, size, test membership, find idempotents,
15
+ # etc. We get a generating set and use that otherwise.
16
+
17
+ InstallMethod(PositionsInSupersemigroup,
18
+ "for a semigroup ideal with known generators",
19
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal and
20
+ CanUseFroidurePin],
21
+ function(I)
22
+ local S, L, R, D, result, pos, x;
23
+ S := SupersemigroupOfIdeal(I);
24
+ L := LeftCayleyDigraph(S);
25
+ R := RightCayleyDigraph(S);
26
+ D := DigraphEdgeUnion(L, R);
27
+ # This could be better, we could use the quotient of the above graph by its
28
+ # sccs.
29
+
30
+ result := [];
31
+ for x in GeneratorsOfSemigroupIdeal(I) do
32
+ pos := PositionCanonical(S, x);
33
+ if not pos in result then
34
+ AddSet(result, pos);
35
+ UniteSet(result, VerticesReachableFrom(D, pos));
36
+ fi;
37
+ od;
38
+
39
+ return result;
40
+ end);
41
+
42
+ InstallMethod(GeneratorsOfInverseSemigroup,
43
+ "for an inverse semigroup ideal with inverse op and generators",
44
+ [IsSemigroupIdeal and IsInverseSemigroup
45
+ and IsGeneratorsOfInverseSemigroup and HasGeneratorsOfSemigroupIdeal],
46
+ GeneratorsOfSemigroup);
47
+
48
+ InstallMethod(Enumerator,
49
+ "semigroup ideal with generators and CanUseFroidurePin",
50
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal and CanUseFroidurePin],
51
+ 2, # To beat the method for IsSemigroup and CanUseFroidurePin
52
+ function(I)
53
+ local en, record;
54
+ en := EnumeratorCanonical(SupersemigroupOfIdeal(I));
55
+
56
+ record := rec();
57
+ # TODO store en in enum
58
+ record.NumberElement :=
59
+ {enum, elt} -> Position(PositionsInSupersemigroup(I), Position(en, elt));
60
+
61
+ record.ElementNumber := {enum, nr} -> en[PositionsInSupersemigroup(I)[nr]];
62
+
63
+ record.IsBound\[\] := {enum, nr} -> IsBound(PositionsInSupersemigroup(I)[nr]);
64
+
65
+ record.Length := enum -> Length(PositionsInSupersemigroup(I));
66
+
67
+ return EnumeratorByFunctions(I, record);
68
+ end);
69
+
70
+ InstallMethod(Size, "for a semigroup ideal with generators",
71
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
72
+ I -> Length(Enumerator(I)));
73
+
74
+ InstallMethod(\in,
75
+ "for a multiplicative element and semigroup ideal with generators",
76
+ [IsMultiplicativeElement,
77
+ IsSemigroup and CanUseFroidurePin and IsSemigroupIdeal
78
+ and HasGeneratorsOfSemigroupIdeal],
79
+ {x, I} -> Position(Enumerator(I), x) <> fail);
80
+
81
+ # The method for GeneratorsOfSemigroup for a semigroup ideal must
82
+ # not rely in any way on the output of the Froidure-Pin algorithm when run on
83
+ # the ideal. In order to run the Froidure-Pin algorithm requires its input
84
+ # semigroup (ideal) to have a generating set, and so if the method below
85
+ # requires the output of the F-P algorithm (Green's relations, etc), then we
86
+ # get caught in an infinite loop: finding the generating set calls the F-P
87
+ # algorithm which tries to find a generating set, and so on.
88
+
89
+ InstallMethod(GeneratorsOfSemigroup, "for a semigroup ideal with generators",
90
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
91
+ function(I)
92
+ local U;
93
+ U := ClosureSemigroup(Semigroup(MinimalIdealGeneratingSet(I)),
94
+ Enumerator(I));
95
+ return GeneratorsOfSemigroup(U);
96
+ end);
97
+
98
+ InstallMethod(Idempotents, "for a semigroup ideal with generators",
99
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal and CanUseFroidurePin],
100
+ function(I)
101
+ local S, en;
102
+ S := SupersemigroupOfIdeal(I);
103
+ en := EnumeratorCanonical(S);
104
+ return en{IdempotentsSubset(S, PositionsInSupersemigroup(I))};
105
+ end);
@@ -0,0 +1,45 @@
1
+ #############################################################################
2
+ ##
3
+ ## ideals/ideals.gd
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+
10
+ DeclareSynonymAttr("GeneratorsOfSemigroupIdeal", GeneratorsOfMagmaIdeal);
11
+ DeclareGlobalFunction("SemigroupIdeal");
12
+
13
+ DeclareOperation("SemigroupIdealByGenerators",
14
+ [IsSemigroup, IsListOrCollection]);
15
+
16
+ DeclareOperation("SemigroupIdealByGenerators",
17
+ [IsSemigroup, IsListOrCollection, IsRecord]);
18
+
19
+ DeclareOperation("SemigroupIdealByGeneratorsNC",
20
+ [IsSemigroup, IsListOrCollection, IsRecord]);
21
+
22
+ DeclareAttribute("MinimalIdealGeneratingSet", IsSemigroupIdeal);
23
+
24
+ # the <Parent> of an ideal is the semigroup in which the ideal was created,
25
+ # i.e. the first argument of <SemigroupIdeal(S, I)>. The
26
+ # <SupersemigroupOfIdeal> is the object containing <GeneratorsOfSemigroup>
27
+ # which are used to compute the ideal. For a regular semigroup ideal,
28
+ # <SupersemigroupOfIdeal> will always be the top most semigroup used to create
29
+ # any of the predecessors of the current ideal. For example, if <S> is a
30
+ # semigroup, <I> is a regular ideal of <S>, and <J> is an ideal of <I>, then
31
+ # <Parent(J)> is <I> and <SupersemigroupOfIdeal(J)> is <S>. This is to avoid
32
+ # computing a generating set for <I>, in this example, which is expensive and
33
+ # unnecessary since <I> is regular (in which case the Green's relations of <I>
34
+ # are just restrictions of the Green's relations on <S>).
35
+ #
36
+ # If <S> is a semigroup, <I> is a non-regular ideal of <S>, <J> is an ideal of
37
+ # <I>, then <SupersemigroupOfIdeal(J)> is <I>, since we anyway currently have
38
+ # to use a <GeneratorsOfSemigroup(I)> to compute anything about <I> other than
39
+ # its size and membership.
40
+
41
+ DeclareAttribute("SupersemigroupOfIdeal", IsSemigroupIdeal);
42
+
43
+ InstallTrueMethod(IsSemigroup, IsSemigroupIdeal);
44
+
45
+ DeclareAttribute("Ideals", IsSemigroup);
@@ -0,0 +1,442 @@
1
+ #############################################################################
2
+ ##
3
+ ## ideals/ideals.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 semigroups, which do not depend on
12
+ # the representation as IsActingSemigroup or CanUseFroidurePin.
13
+
14
+ InstallImmediateMethod(IsSemigroupIdeal, IsSemigroup, 0, IsMagmaIdeal);
15
+ InstallTrueMethod(IsSemigroupIdeal, IsMagmaIdeal and IsSemigroup);
16
+ InstallTrueMethod(IsSemigroup, IsSemigroupIdeal);
17
+
18
+ BindGlobal("_ViewStringForSemigroupsIdeals",
19
+ function(I)
20
+ local str, suffix, nrgens;
21
+
22
+ str := "\><";
23
+
24
+ if HasIsCommutative(I) and IsCommutative(I) then
25
+ Append(str, "\>commutative\< ");
26
+ fi;
27
+
28
+ if not IsGroup(I) then
29
+ if HasIsTrivial(I) and IsTrivial(I) then
30
+ # do nothing
31
+ elif HasIsZeroSimpleSemigroup(I) and IsZeroSimpleSemigroup(I) then
32
+ Append(str, "\>0-simple\< ");
33
+ elif HasIsSimpleSemigroup(I) and IsSimpleSemigroup(I) then
34
+ Append(str, "\>simple\< ");
35
+ fi;
36
+
37
+ if HasIsInverseSemigroup(I) and IsInverseSemigroup(I) then
38
+ Append(str, "\>inverse\< ");
39
+ elif HasIsRegularSemigroup(I)
40
+ and not (HasIsSimpleSemigroup(I) and IsSimpleSemigroup(I)) then
41
+ if IsRegularSemigroup(I) then
42
+ Append(str, "\>regular\< ");
43
+ else
44
+ Append(str, "\>non-regular\< ");
45
+ fi;
46
+ fi;
47
+ fi;
48
+
49
+ Append(str, SemigroupViewStringPrefix(I));
50
+
51
+ Append(str, "\>semigroup\< \>ideal\< ");
52
+
53
+ if HasIsTrivial(I) and not IsTrivial(I) and HasSize(I) then
54
+ Append(str, "\>of size\> ");
55
+ Append(str, ViewString(Size(I)));
56
+ Append(str, ",\<\< ");
57
+ fi;
58
+
59
+ suffix := SemigroupViewStringSuffix(I);
60
+ if suffix <> ""
61
+ and not (HasIsTrivial(I) and not IsTrivial(I) and HasSize(I)) then
62
+ suffix := Concatenation("of ", suffix);
63
+ fi;
64
+ Append(str, suffix);
65
+
66
+ nrgens := Length(GeneratorsOfSemigroupIdeal(I));
67
+
68
+ Append(str, "with\> ");
69
+ Append(str, ViewString(nrgens));
70
+ Append(str, "\< generator");
71
+
72
+ if nrgens > 1 or nrgens = 0 then
73
+ Append(str, "s\<");
74
+ else
75
+ Append(str, "\<");
76
+ fi;
77
+ Append(str, ">\<");
78
+
79
+ return str;
80
+ end);
81
+
82
+ InstallMethod(ViewString,
83
+ "for a semigroup ideal with ideal generators",
84
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
85
+ 8, # to beat the library method
86
+ _ViewStringForSemigroupsIdeals);
87
+
88
+ InstallMethod(ViewString,
89
+ "for a semigroup ideal with ideal generators",
90
+ [IsPartialPermSemigroup and IsInverseSemigroup and IsSemigroupIdeal and
91
+ HasGeneratorsOfSemigroupIdeal], 1, # to beat the library method
92
+ _ViewStringForSemigroupsIdeals);
93
+
94
+ InstallMethod(ViewString,
95
+ "for a semigroup ideal with ideal generators",
96
+ [IsPartialPermMonoid and IsInverseMonoid and IsSemigroupIdeal and
97
+ HasGeneratorsOfSemigroupIdeal], 1, # to beat the library method
98
+ _ViewStringForSemigroupsIdeals);
99
+
100
+ MakeReadWriteGlobal("_ViewStringForSemigroupsIdeals");
101
+ Unbind(_ViewStringForSemigroupsIdeals);
102
+
103
+ # Can't currently test this
104
+ InstallMethod(PrintObj,
105
+ "for a semigroup ideal with ideal generators",
106
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
107
+ function(I)
108
+ Print(PrintString(I));
109
+ end);
110
+
111
+ InstallMethod(PrintString,
112
+ "for a semigroup ideal with ideal generators",
113
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
114
+ function(I)
115
+ local str;
116
+
117
+ str := "\>\>SemigroupIdeal(\< \>";
118
+ Append(str, PrintString(SupersemigroupOfIdeal(I)));
119
+ Append(str, ",\< \>");
120
+ Append(str, PrintString(GeneratorsOfSemigroupIdeal(I)));
121
+ Append(str, "\< )\<");
122
+ return str;
123
+ end);
124
+
125
+ # This is required since there is a method for ViewObj of a semigroup ideal
126
+ # with a higher rank than the default method which delegates from ViewObj to
127
+ # ViewString. Hence the method for ViewString is never invoked without the
128
+ # method below.
129
+
130
+ InstallMethod(ViewObj,
131
+ "for a semigroup ideal with ideal generators",
132
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal], 1,
133
+ function(I)
134
+ Print(ViewString(I));
135
+ end);
136
+
137
+ InstallMethod(\., "for a semigroup ideal with generators and pos int",
138
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal, IsPosInt],
139
+ function(S, n)
140
+ S := GeneratorsOfSemigroupIdeal(S);
141
+ n := NameRNam(n);
142
+ n := Int(n);
143
+ if n = fail or Length(S) < n then
144
+ ErrorNoReturn("the 2nd argument (a positive integer) exceeds ",
145
+ "the number of generators of the 1st argument (an ideal)");
146
+ fi;
147
+ return S[n];
148
+ end);
149
+
150
+ InstallMethod(\=, "for semigroup ideals",
151
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal,
152
+ IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
153
+ function(I, J)
154
+
155
+ if SupersemigroupOfIdeal(I) = SupersemigroupOfIdeal(J) then
156
+ return ForAll(GeneratorsOfMagmaIdeal(I), x -> x in J)
157
+ and ForAll(GeneratorsOfMagmaIdeal(J), x -> x in I);
158
+ fi;
159
+ return ForAll(GeneratorsOfSemigroup(I), x -> x in J)
160
+ and ForAll(GeneratorsOfSemigroup(J), x -> x in I);
161
+ end);
162
+
163
+ InstallMethod(\=, "for a semigroup ideal and finite semigroup with generators",
164
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal,
165
+ IsSemigroup and HasGeneratorsOfSemigroup and IsFinite],
166
+ function(I, S)
167
+ if ForAll(GeneratorsOfSemigroup(S), x -> x in I) then
168
+ if S = Parent(I) then
169
+ return true;
170
+ elif HasGeneratorsOfSemigroup(I) then
171
+ return ForAll(GeneratorsOfSemigroup(I), x -> x in S);
172
+ else
173
+ return Size(I) = Size(S);
174
+ fi;
175
+ fi;
176
+ return false;
177
+ end);
178
+
179
+ InstallMethod(\=, "for a semigroup with generators and a semigroup ideal",
180
+ [IsSemigroup and HasGeneratorsOfSemigroup,
181
+ IsSemigroupIdeal and HasGeneratorsOfMagmaIdeal],
182
+ {S, I} -> I = S);
183
+
184
+ InstallMethod(Representative, "for a semigroup ideal",
185
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
186
+ {I} -> Representative(GeneratorsOfMagmaIdeal(I)));
187
+
188
+ # a convenience, similar to the functions <Semigroup>, <Monoid>, etc
189
+
190
+ InstallGlobalFunction(SemigroupIdeal,
191
+ function(arg...)
192
+ local out, i;
193
+
194
+ if Length(arg) <= 1 then
195
+ ErrorNoReturn("there must be 2 or more arguments");
196
+ elif not IsSemigroup(arg[1]) then
197
+ ErrorNoReturn("the 1st argument is not a semigroup");
198
+ elif Length(arg) = 2 and IsMatrix(arg[2]) then
199
+ # special case for matrices, because they may look like lists
200
+ return SemigroupIdealByGenerators(arg[1], [arg[2]]);
201
+
202
+ elif Length(arg) = 2 and IsList(arg[2]) and 0 < Length(arg[2]) then
203
+ # list of generators
204
+ return SemigroupIdealByGenerators(arg[1], arg[2]);
205
+ elif (IsMultiplicativeElement(arg[2])
206
+ and IsGeneratorsOfSemigroup([arg[2]]))
207
+ or (IsListOrCollection(arg[2])
208
+ and IsGeneratorsOfSemigroup(arg[2]))
209
+ or (HasIsEmpty(arg[2]) and IsEmpty(arg[2])) then
210
+ # generators and collections of generators
211
+ out := [];
212
+ for i in [2 .. Length(arg)] do
213
+ # so that we can pass the options record
214
+ if i = Length(arg) and IsRecord(arg[i]) then
215
+ return SemigroupIdealByGenerators(arg[1], out, arg[i]);
216
+ elif IsMultiplicativeElement(arg[i]) and
217
+ IsGeneratorsOfSemigroup([arg[i]]) then
218
+ Add(out, arg[i]);
219
+ elif IsGeneratorsOfSemigroup(arg[i]) then
220
+ if HasGeneratorsOfSemigroupIdeal(arg[i]) then
221
+ Append(out, GeneratorsOfSemigroupIdeal(arg[i]));
222
+ elif HasGeneratorsOfSemigroup(arg[i]) then
223
+ Append(out, GeneratorsOfSemigroup(arg[i]));
224
+ elif IsList(arg[i]) then
225
+ Append(out, arg[i]);
226
+ else
227
+ Append(out, AsList(arg[i]));
228
+ fi;
229
+ else
230
+ ErrorNoReturn("the 2nd argument is not a combination ",
231
+ "of generators, lists of generators, ",
232
+ "nor semigroups");
233
+ fi;
234
+ od;
235
+ return SemigroupIdealByGenerators(arg[1], out);
236
+ fi;
237
+ ErrorNoReturn("invalid arguments");
238
+ end);
239
+
240
+ InstallMethod(SemigroupIdealByGenerators,
241
+ "for a semigroup and list or collections",
242
+ [IsSemigroup, IsListOrCollection],
243
+ {S, gens} -> SemigroupIdealByGenerators(S, gens, SEMIGROUPS.OptionsRec(S)));
244
+
245
+ InstallMethod(SemigroupIdealByGenerators,
246
+ "for semigroup, list or collection, and record",
247
+ [IsSemigroup, IsListOrCollection, IsRecord],
248
+ function(S, gens, opts)
249
+ if not ForAll(gens, x -> x in S) then
250
+ ErrorNoReturn("the 2nd argument (a mult. elt. coll.) do not all ",
251
+ "belong to the semigroup");
252
+ fi;
253
+ return SemigroupIdealByGeneratorsNC(S, gens, opts);
254
+ end);
255
+
256
+ InstallMethod(SemigroupIdealByGeneratorsNC,
257
+ "for a semigroup, list or collections, and record",
258
+ [IsSemigroup, IsListOrCollection, IsRecord],
259
+ function(S, gens, opts)
260
+ local filts, I;
261
+ opts := SEMIGROUPS.ProcessOptionsRec(SEMIGROUPS.DefaultOptionsRec, opts);
262
+ gens := AsList(gens);
263
+
264
+ filts := IsMagmaIdeal and IsAttributeStoringRep;
265
+
266
+ if opts.acting
267
+ and (IsActingSemigroup(S) or IsGeneratorsOfActingSemigroup(gens)) then
268
+ filts := filts and IsActingSemigroup;
269
+ if opts.regular then
270
+ filts := filts and IsRegularActingSemigroupRep;
271
+ fi;
272
+ fi;
273
+
274
+ if IsIntegerMatrixSemigroup(S) then
275
+ filts := filts and IsIntegerMatrixSemigroup;
276
+ elif IsMatrixOverFiniteFieldSemigroup(S) then
277
+ filts := filts and IsMatrixOverFiniteFieldSemigroup;
278
+ fi;
279
+
280
+ I := Objectify(NewType(FamilyObj(gens), filts), rec(opts := opts));
281
+
282
+ if IsInverseActingSemigroupRep(S) then
283
+ SetFilterObj(I, IsInverseActingSemigroupRep);
284
+ elif IsRegularActingSemigroupRep(S) then
285
+ SetFilterObj(I, IsRegularActingSemigroupRep);
286
+ fi;
287
+
288
+ if (HasIsInverseSemigroup(S) and IsInverseSemigroup(S)) then
289
+ SetIsInverseSemigroup(I, true);
290
+ if HasIsGeneratorsOfInverseSemigroup(S) then
291
+ SetIsGeneratorsOfInverseSemigroup(I, IsGeneratorsOfInverseSemigroup(S));
292
+ fi;
293
+ elif (HasIsRegularSemigroup(S) and IsRegularSemigroup(S)) then
294
+ SetIsRegularSemigroup(I, true);
295
+ fi;
296
+
297
+ if (HasIsStarSemigroup(S) and IsStarSemigroup(S)) then
298
+ SetIsStarSemigroup(I, true);
299
+ fi;
300
+
301
+ if (HasIsRegularSemigroup(S) and not IsRegularSemigroup(S)) then
302
+ # <S> is a non-regular semigroup or ideal
303
+ SetSupersemigroupOfIdeal(I, S);
304
+ elif HasSupersemigroupOfIdeal(S) then
305
+ # <S> is a regular ideal
306
+
307
+ # this takes precedence over the last case since we hope that the
308
+ # supersemigroup of an ideal has fewer generators than the ideal...
309
+ SetSupersemigroupOfIdeal(I, SupersemigroupOfIdeal(S));
310
+ else
311
+ # <S> is a regular semigroup
312
+ SetSupersemigroupOfIdeal(I, S);
313
+ fi;
314
+
315
+ SetParent(I, S);
316
+ SetGeneratorsOfMagmaIdeal(I, gens);
317
+
318
+ if not IsActingSemigroup(I) then
319
+ # to keep the craziness in the library happy!
320
+ SetActingDomain(I, S);
321
+ elif IsActingSemigroup(I)
322
+ and not (HasIsRegularSemigroup(I) and IsRegularSemigroup(I)) then
323
+ # this is done so that the ideal knows it is regular or non-regular from
324
+ # the point of creation...
325
+ Enumerate(SemigroupIdealData(I), infinity, ReturnFalse);
326
+ fi;
327
+
328
+ return I;
329
+ end);
330
+
331
+ InstallMethod(MinimalIdealGeneratingSet,
332
+ "for a semigroup ideal with generators",
333
+ [IsSemigroupIdeal and HasGeneratorsOfSemigroupIdeal],
334
+ function(I)
335
+ local S, dclasses, D, labels, x;
336
+
337
+ if Length(GeneratorsOfSemigroupIdeal(I)) = 1 then
338
+ return GeneratorsOfSemigroupIdeal(I);
339
+ fi;
340
+
341
+ S := SupersemigroupOfIdeal(I);
342
+ dclasses := [];
343
+ for x in GeneratorsOfSemigroupIdeal(I) do
344
+ if not ForAny(dclasses, D -> x in D) then
345
+ Add(dclasses, DClass(S, x));
346
+ fi;
347
+ od;
348
+ D := DigraphMutableCopy(PartialOrderOfDClasses(S));
349
+ ClearDigraphVertexLabels(D);
350
+ InducedSubdigraph(D, List(dclasses, x -> Position(DClasses(S), x)));
351
+ DigraphRemoveLoops(D);
352
+ labels := DigraphVertexLabels(D);
353
+ return List(DigraphSources(D), x -> Representative(DClasses(S)[labels[x]]));
354
+ end);
355
+
356
+ # JDM: is there a better method? Certainly for regular acting ideals
357
+ # there is
358
+
359
+ InstallMethod(InversesOfSemigroupElementNC,
360
+ "for a semigroup ideal and multiplicative element",
361
+ [IsSemigroupIdeal, IsMultiplicativeElement],
362
+ {I, x} -> InversesOfSemigroupElementNC(SupersemigroupOfIdeal(I), x));
363
+
364
+ InstallMethod(IsCommutativeSemigroup, "for a semigroup ideal",
365
+ [IsSemigroupIdeal],
366
+ function(I)
367
+ local x, y;
368
+
369
+ if HasParent(I) and HasIsCommutativeSemigroup(Parent(I))
370
+ and IsCommutativeSemigroup(Parent(I)) then
371
+ return true;
372
+ fi;
373
+
374
+ for x in GeneratorsOfSemigroupIdeal(I) do
375
+ for y in GeneratorsOfSemigroup(SupersemigroupOfIdeal(I)) do
376
+ if not x * y = y * x then
377
+ return false;
378
+ fi;
379
+ od;
380
+ od;
381
+
382
+ return true;
383
+ end);
384
+
385
+ InstallMethod(IsTrivial, "for a semigroup ideal",
386
+ [IsSemigroupIdeal],
387
+ function(I)
388
+ local gens;
389
+
390
+ if HasIsTrivial(Parent(I)) and IsTrivial(Parent(I)) then
391
+ return true;
392
+ fi;
393
+
394
+ gens := GeneratorsOfSemigroupIdeal(I);
395
+ return ForAll(gens, x -> gens[1] = x) and IsMultiplicativeZero(I, gens[1]);
396
+ end);
397
+
398
+ InstallMethod(IsFactorisableInverseMonoid, "for an inverse semigroup ideal",
399
+ [IsSemigroupIdeal and IsInverseSemigroup],
400
+ function(I)
401
+ if I = SupersemigroupOfIdeal(I) then
402
+ return IsFactorisableInverseMonoid(SupersemigroupOfIdeal(I));
403
+ fi;
404
+ return IsFactorisableInverseMonoid(
405
+ InverseSemigroup(GeneratorsOfSemigroup(I)));
406
+ end);
407
+
408
+ InstallMethod(Ideals, "for a finite semigroup",
409
+ [IsSemigroup and IsFinite],
410
+ function(S)
411
+ local reps, D, cliques;
412
+
413
+ # Groups have only one ideal
414
+ if IsGroup(S) or (HasIsGroupAsSemigroup(S) and IsGroupAsSemigroup(S)) then
415
+ return [SemigroupIdeal(S, S.1)];
416
+ fi;
417
+ reps := DClassReps(S);
418
+ # Digraph of D-class partial order
419
+ D := DigraphMutableCopy(PartialOrderOfDClasses(S));
420
+ # Graph with an edge between any two comparable D-classes
421
+ DigraphSymmetricClosure(DigraphReflexiveTransitiveClosure(D));
422
+ # Graph with an edge between any two non-comparable D-classes
423
+ DigraphDual(D);
424
+ # All non-empty sets of pairwise incomparable D-classes
425
+ cliques := DigraphCliques(D);
426
+ return List(cliques, clique -> SemigroupIdeal(S, reps{clique}));
427
+ end);
428
+
429
+ InstallMethod(IsMultiplicativeZero,
430
+ "for a semigroup ideal and multiplicative element",
431
+ [IsSemigroupIdeal, IsMultiplicativeElement],
432
+ function(I, x)
433
+ local gens;
434
+ if not x in I then
435
+ return false;
436
+ elif HasGeneratorsOfSemigroup(I) then
437
+ gens := GeneratorsOfSemigroup(I);
438
+ else
439
+ gens := GeneratorsOfSemigroup(SupersemigroupOfIdeal(I));
440
+ fi;
441
+ return ForAll(gens, g -> g * x = x and x * g = x);
442
+ end);
@@ -0,0 +1,16 @@
1
+ ############################################################################
2
+ ##
3
+ ## ideals/lambda-rho.gd
4
+ ## Copyright (C) 2013-2022 James D. Mitchell
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+
11
+ DeclareFilter("IsIdealOrb", IsOrbit);
12
+
13
+ DeclareGlobalFunction("UpdateIdealLambdaOrb");
14
+ DeclareGlobalFunction("UpdateIdealRhoOrb");
15
+
16
+ DeclareOperation("Enumerate", [IsIdealOrb, IsCyclotomic, IsFunction]);