passagemath-gap-pkg-semigroups 10.6.29__cp312-abi3-manylinux_2_24_aarch64.manylinux_2_28_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 (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/aarch64-unknown-linux-gnu-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1016 -0
  17. gap/pkg/semigroups/config.status +1132 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.libs/libsemigroups-8ea3c4e7.so.2.0.0 +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,589 @@
1
+ ############################################################################
2
+ ##
3
+ ## congruences/conginv.gi
4
+ ## Copyright (C) 2015-2022 Michael C. Young
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+ ## This file contains methods for congruences on inverse semigroups, using the
11
+ ## "kernel and trace" representation.
12
+ ##
13
+ ## See J.M. Howie's "Fundamentals of Semigroup Theory" Section 5.3, and see
14
+ ## Michael Young's MSc thesis "Computing with Semigroup Congruences" Chapter 5
15
+ ## (www-circa.mcs.st-and.ac.uk/~mct25/files/mt5099-report.pdf) for more details.
16
+ ##
17
+
18
+ InstallImmediateMethod(CanUseLibsemigroupsCongruence,
19
+ IsInverseSemigroupCongruenceByKernelTrace,
20
+ 0,
21
+ ReturnFalse);
22
+
23
+ # TODO(later) use a congruence on the semilattice of idempotents for the trace,
24
+ # instead of traceBlocks and traceLookup.
25
+
26
+ InstallGlobalFunction(InverseSemigroupCongruenceByKernelTrace,
27
+ function(S, kernel, traceBlocks)
28
+ local a, x, traceClass, f, l, e;
29
+ if not IsInverseSemigroup(S)
30
+ and IsMultiplicativeElementWithInverseCollection(S) then
31
+ ErrorNoReturn("the 1st argument is not an inverse ",
32
+ "semigroup with inverse op");
33
+ elif not IsInverseSubsemigroup(S, kernel) then
34
+ # Check that the kernel is an inverse subsemigroup
35
+ ErrorNoReturn("the 2nd argument is not an inverse ",
36
+ "subsemigroup of the 1st argument (an inverse semigroup)");
37
+ # CHECK KERNEL IS NORMAL:
38
+ elif NrIdempotents(kernel) <> NrIdempotents(S) then
39
+ # (1) Must contain all the idempotents of S
40
+ ErrorNoReturn("the 2nd argument (an inverse semigroup) does not contain ",
41
+ "all of the idempotents of the 1st argument (an inverse",
42
+ " semigroup)");
43
+ fi;
44
+ # (2) Must be self-conjugate
45
+ for a in kernel do
46
+ for x in GeneratorsOfSemigroup(S) do
47
+ if not a ^ x in kernel then
48
+ ErrorNoReturn("the 2nd argument (an inverse semigroup) must be ",
49
+ "self-conjugate");
50
+ fi;
51
+ od;
52
+ od;
53
+ # Check conditions for a congruence pair: Howie p.156
54
+ for traceClass in traceBlocks do
55
+ for f in traceClass do
56
+ l := LClass(S, f);
57
+ for a in l do
58
+ if a in kernel then
59
+ # Condition (C2): aa' related to a'a
60
+ if not a * a ^ -1 in traceClass then
61
+ ErrorNoReturn("not a valid congruence pair (C2)");
62
+ fi;
63
+ else
64
+ # Condition (C1): (ae in kernel && e related to a'a) => a in kernel
65
+ for e in traceClass do
66
+ if a * e in kernel then
67
+ ErrorNoReturn("not a valid congruence pair (C1)");
68
+ fi;
69
+ od;
70
+ fi;
71
+ od;
72
+ od;
73
+ od;
74
+ # TODO(later) check trace is *normal*
75
+ return InverseSemigroupCongruenceByKernelTraceNC(S, kernel, traceBlocks);
76
+ end);
77
+
78
+ InstallGlobalFunction(InverseSemigroupCongruenceByKernelTraceNC,
79
+ function(S, kernel, traceBlocks)
80
+ local traceLookup, ES, fam, C, i, elm;
81
+
82
+ # Sort blocks
83
+ traceBlocks := SortedList(List(traceBlocks, SortedList));
84
+
85
+ # Calculate lookup table for trace
86
+ # Might remove lookup - might never be better than blocks
87
+ traceLookup := [];
88
+ ES := IdempotentGeneratedSubsemigroup(S);
89
+
90
+ for i in [1 .. Length(traceBlocks)] do
91
+ for elm in traceBlocks[i] do
92
+ traceLookup[PositionCanonical(ES, elm)] := i;
93
+ od;
94
+ od;
95
+ # Construct the object
96
+ fam := GeneralMappingsFamily(ElementsFamily(FamilyObj(S)),
97
+ ElementsFamily(FamilyObj(S)));
98
+ C := Objectify(NewType(fam, IsInverseSemigroupCongruenceByKernelTrace),
99
+ rec(kernel := kernel,
100
+ traceBlocks := traceBlocks,
101
+ traceLookup := traceLookup));
102
+ SetSource(C, S);
103
+ SetRange(C, S);
104
+ SetKernelOfSemigroupCongruence(C, kernel);
105
+ SetTraceOfSemigroupCongruence(C, traceBlocks);
106
+ return C;
107
+ end);
108
+
109
+ InstallMethod(ViewObj,
110
+ "for inverse semigroup congruence by kernel and trace",
111
+ [IsInverseSemigroupCongruenceByKernelTrace],
112
+ function(C)
113
+ Print("<semigroup congruence over ");
114
+ ViewObj(Range(C));
115
+ Print(" with congruence pair (",
116
+ Size(C!.kernel), ",",
117
+ Size(C!.traceBlocks), ")>");
118
+ end);
119
+
120
+ InstallMethod(\=,
121
+ "for two inverse semigroup congruences by kernel and trace",
122
+ [IsInverseSemigroupCongruenceByKernelTrace,
123
+ IsInverseSemigroupCongruenceByKernelTrace],
124
+ function(lhop, rhop)
125
+ return(Range(lhop) = Range(rhop) and
126
+ lhop!.kernel = rhop!.kernel and
127
+ lhop!.traceBlocks = rhop!.traceBlocks);
128
+ end);
129
+
130
+ InstallMethod(IsSubrelation,
131
+ "for two inverse semigroup congruences by kernel and trace",
132
+ [IsInverseSemigroupCongruenceByKernelTrace,
133
+ IsInverseSemigroupCongruenceByKernelTrace],
134
+ function(lhop, rhop)
135
+ # Tests whether rhop is a subcongruence of lhop
136
+ if Range(lhop) <> Range(rhop) then
137
+ Error("the 1st and 2nd arguments are congruences over different",
138
+ " semigroups");
139
+ fi;
140
+ return IsSubsemigroup(lhop!.kernel, rhop!.kernel)
141
+ and ForAll(rhop!.traceBlocks,
142
+ b2 -> ForAny(lhop!.traceBlocks, b1 -> IsSubset(b1, b2)));
143
+ end);
144
+
145
+ InstallMethod(ImagesElm,
146
+ "for inverse semigroup congruence by kernel and trace and mult. elt.",
147
+ [IsInverseSemigroupCongruenceByKernelTrace,
148
+ IsMultiplicativeElementWithInverse],
149
+ function(C, elm)
150
+ local S, images, e, b;
151
+ S := Range(C);
152
+ if not elm in S then
153
+ ErrorNoReturn("the 2nd argument (a mult. elt. with inverse) does not ",
154
+ "belong to the range of the 1st argument (a congruence)");
155
+ fi;
156
+ images := [];
157
+ # Consider all idempotents trace-related to (a^-1 a)
158
+ for e in First(C!.traceBlocks, c -> (elm ^ -1 * elm) in c) do
159
+ for b in LClass(S, e) do
160
+ if elm * b ^ -1 in C!.kernel then
161
+ Add(images, b);
162
+ fi;
163
+ od;
164
+ od;
165
+ return images;
166
+ end);
167
+
168
+ InstallMethod(EquivalenceRelationPartitionWithSingletons,
169
+ "for inverse semigroup congruence by kernel and trace",
170
+ [IsInverseSemigroupCongruenceByKernelTrace],
171
+ function(C)
172
+ local S, elmlists, kernel, blockelmlists, pos, traceBlock, id, elm;
173
+
174
+ S := Range(C);
175
+ elmlists := [];
176
+ kernel := Elements(C!.kernel);
177
+
178
+ # Consider each trace-class in turn
179
+ for traceBlock in C!.traceBlocks do
180
+ # Consider all the congruence classes corresponding to this trace-class
181
+ blockelmlists := []; # List of lists of elms in class
182
+ for id in traceBlock do
183
+ for elm in LClass(S, id) do
184
+ # Find the congruence class that this element lies in
185
+ pos := PositionProperty(blockelmlists,
186
+ class -> elm * class[1] ^ -1 in kernel);
187
+ if pos = fail then
188
+ # New class
189
+ Add(blockelmlists, [elm]);
190
+ else
191
+ # Add to the old class
192
+ Add(blockelmlists[pos], elm);
193
+ fi;
194
+ od;
195
+ od;
196
+ Append(elmlists, blockelmlists);
197
+ od;
198
+ return elmlists;
199
+ end);
200
+
201
+ InstallMethod(CongruenceTestMembershipNC,
202
+ "for inverse semigroup congruence by kernel and trace and two mult. elts",
203
+ [IsInverseSemigroupCongruenceByKernelTrace,
204
+ IsMultiplicativeElement,
205
+ IsMultiplicativeElement],
206
+ function(C, x, y)
207
+ # Is (a^-1 a, b^-1 b) in the trace?
208
+ if x ^ -1 * x in
209
+ First(C!.traceBlocks, c -> y ^ -1 * y in c) then
210
+ # Is ab^-1 in the kernel?
211
+ if x * y ^ -1 in C!.kernel then
212
+ return true;
213
+ fi;
214
+ fi;
215
+ return false;
216
+ end);
217
+
218
+ InstallMethod(EquivalenceClassOfElementNC,
219
+ "for inverse semigroup congruence by kernel and trace and mult. elt.",
220
+ [IsInverseSemigroupCongruenceByKernelTrace, IsMultiplicativeElement],
221
+ function(C, x)
222
+ local class;
223
+ class := Objectify(InverseSemigroupCongruenceClassByKernelTraceType(C),
224
+ rec());
225
+ SetParentAttr(class, Range(C));
226
+ SetEquivalenceClassRelation(class, C);
227
+ SetRepresentative(class, x);
228
+ return class;
229
+ end);
230
+
231
+ InstallMethod(InverseSemigroupCongruenceClassByKernelTraceType,
232
+ "for inverse semigroup congruence by kernel and trace",
233
+ [IsInverseSemigroupCongruenceByKernelTrace],
234
+ function(C)
235
+ return NewType(FamilyObj(Range(C)),
236
+ IsInverseSemigroupCongruenceClassByKernelTrace);
237
+ end);
238
+
239
+ InstallMethod(TraceOfSemigroupCongruence, "for semigroup congruence",
240
+ [IsSemigroupCongruence],
241
+ function(C)
242
+ local S, invcong;
243
+ S := Range(C);
244
+ if not (IsInverseSemigroup(S) and IsGeneratorsOfInverseSemigroup(S)) then
245
+ ErrorNoReturn("the range of the argument (a congruence) must be an ",
246
+ "inverse semigroup with inverse op");
247
+ fi;
248
+ invcong := AsInverseSemigroupCongruenceByKernelTrace(C);
249
+ return invcong!.traceBlocks;
250
+ end);
251
+
252
+ InstallMethod(KernelOfSemigroupCongruence, "for semigroup congruence",
253
+ [IsSemigroupCongruence],
254
+ function(C)
255
+ local S, invcong;
256
+ S := Range(C);
257
+ if not (IsInverseSemigroup(S) and IsGeneratorsOfInverseSemigroup(S)) then
258
+ ErrorNoReturn("the range of the argument (a congruence) must be an ",
259
+ "inverse semigroup with inverse op");
260
+ fi;
261
+ invcong := AsInverseSemigroupCongruenceByKernelTrace(C);
262
+ return invcong!.kernel;
263
+ end);
264
+
265
+ InstallMethod(AsInverseSemigroupCongruenceByKernelTrace,
266
+ "for semigroup congruence with generating pairs",
267
+ [IsSemigroupCongruence and HasGeneratingPairsOfMagmaCongruence],
268
+ function(C)
269
+ local S;
270
+ S := Range(C);
271
+ if not (IsInverseSemigroup(S) and IsGeneratorsOfInverseSemigroup(S)) then
272
+ ErrorNoReturn("the range of the argument (a congruence) must be an ",
273
+ "inverse semigroup with inverse op");
274
+ fi;
275
+ return
276
+ SEMIGROUPS.KernelTraceClosure(S,
277
+ IdempotentGeneratedSubsemigroup(S),
278
+ List(Idempotents(S), e -> [e]),
279
+ GeneratingPairsOfSemigroupCongruence(C));
280
+ end);
281
+
282
+ InstallMethod(JoinSemigroupCongruences,
283
+ "for inverse semigroup congruence",
284
+ [IsInverseSemigroupCongruenceByKernelTrace,
285
+ IsInverseSemigroupCongruenceByKernelTrace],
286
+ function(lhop, rhop)
287
+ local S, gens1, gens2, kernel, traceBlocks, block, b1, j, pos;
288
+ S := Range(lhop);
289
+ if S <> Range(rhop) then
290
+ Error("cannot form the join of congruences over different semigroups");
291
+ fi;
292
+
293
+ # kernel generated by union of lhop's kernel and rhop's kernel
294
+ gens1 := GeneratorsOfInverseSemigroup(lhop!.kernel);
295
+ gens2 := GeneratorsOfInverseSemigroup(rhop!.kernel);
296
+ kernel := InverseSemigroup(Concatenation(gens1, gens2));
297
+
298
+ # trace is join of lhop's trace and rhop's trace
299
+ traceBlocks := StructuralCopy(lhop!.traceBlocks);
300
+ for block in rhop!.traceBlocks do
301
+ b1 := PositionProperty(traceBlocks, b -> block[1] in b);
302
+ for j in [2 .. Size(block)] do
303
+ if not block[j] in traceBlocks[b1] then
304
+ # Combine the classes
305
+ pos := PositionProperty(traceBlocks, b -> block[j] in b);
306
+ Append(traceBlocks[b1], traceBlocks[pos]);
307
+ Unbind(traceBlocks[pos]);
308
+ fi;
309
+ od;
310
+ traceBlocks := Compacted(traceBlocks);
311
+ od;
312
+
313
+ # Take the kernel-trace closure to ensure we have a correct congruence
314
+ return SEMIGROUPS.KernelTraceClosure(S, kernel, traceBlocks, []);
315
+ end);
316
+
317
+ InstallMethod(MeetSemigroupCongruences,
318
+ "for two inverse semigroup congruence",
319
+ [IsInverseSemigroupCongruenceByKernelTrace,
320
+ IsInverseSemigroupCongruenceByKernelTrace],
321
+ function(lhop, rhop)
322
+ local S, kernel, traceBlocks, ids, c2lookup, classnos, block, classno;
323
+ S := Range(lhop);
324
+ if S <> Range(rhop) then
325
+ Error("cannot form the meet of congruences over different semigroups");
326
+ fi;
327
+
328
+ # Calculate the intersection of the kernels
329
+ # TODO(later): can we do this without enumerating the whole kernel?
330
+ kernel := InverseSemigroup(Intersection(lhop!.kernel, rhop!.kernel));
331
+ kernel := InverseSemigroup(SmallInverseSemigroupGeneratingSet(kernel));
332
+
333
+ # Calculate the intersection of the traces
334
+ traceBlocks := [];
335
+ ids := IdempotentGeneratedSubsemigroup(S);
336
+ c2lookup := rhop!.traceLookup;
337
+ for block in lhop!.traceBlocks do
338
+ classnos := c2lookup{List(block, x -> Position(ids, x))};
339
+ for classno in DuplicateFreeList(classnos) do
340
+ Add(traceBlocks, block{Positions(classnos, classno)});
341
+ od;
342
+ od;
343
+
344
+ return InverseSemigroupCongruenceByKernelTrace(S, kernel, traceBlocks);
345
+ end);
346
+
347
+ SEMIGROUPS.KernelTraceClosure := function(S, kernel, traceBlocks, pairstoapply)
348
+ local canonical_lookup, idsmgp, idslist, slist, kernelgenstoapply, gen, nrk,
349
+ nr, traceUF, i, pos1, j, pos, hashlen, ht, right, genstoapply,
350
+ NormalClosureInverseSemigroup, enumerate_trace, enforce_conditions,
351
+ compute_kernel, oldLookup, oldKernel, trace_unchanged, kernel_unchanged;
352
+
353
+ # This function takes an inverse semigroup S, a subsemigroup ker, an
354
+ # equivalence traceBlocks on the idempotents, and a list of pairs in S.
355
+ # It returns the minimal congruence containing "kernel" in its kernel and
356
+ # "traceBlocks" in its trace, and containing all the given pairs
357
+ # TODO(later) Review this JDM for use of Elements, AsList etc. Could
358
+ # iterators work better?
359
+
360
+ canonical_lookup := function(uf)
361
+ local N;
362
+ N := SizeUnderlyingSetDS(traceUF);
363
+ return FlatKernelOfTransformation(Transformation([1 .. N],
364
+ x -> Representative(uf, x)),
365
+ N);
366
+ end;
367
+
368
+ idsmgp := IdempotentGeneratedSubsemigroup(S);
369
+ idslist := AsListCanonical(idsmgp);
370
+ slist := AsListCanonical(S);
371
+
372
+ # Retrieve the initial information
373
+ kernel := InverseSubsemigroup(S, kernel);
374
+ kernelgenstoapply := Set(pairstoapply, x -> x[1] * x[2] ^ -1);
375
+ # kernel might not be normal, so make sure to check its generators too
376
+ for gen in GeneratorsOfInverseSemigroup(kernel) do
377
+ AddSet(kernelgenstoapply, gen);
378
+ od;
379
+ nrk := Length(kernelgenstoapply);
380
+ Enumerate(kernel);
381
+ pairstoapply := List(pairstoapply,
382
+ x -> [PositionCanonical(idsmgp, RightOne(x[1])),
383
+ PositionCanonical(idsmgp, RightOne(x[2]))]);
384
+ nr := Length(pairstoapply);
385
+
386
+ # Calculate traceUF from traceBlocks
387
+ traceUF := PartitionDS(IsPartitionDS, Length(idslist));
388
+ for i in [1 .. Length(traceBlocks)] do
389
+ pos1 := PositionCanonical(idsmgp, traceBlocks[i][1]);
390
+ for j in [2 .. Length(traceBlocks[i])] do
391
+ Unite(traceUF, pos1, PositionCanonical(idsmgp, traceBlocks[i][j]));
392
+ od;
393
+ od;
394
+
395
+ # Setup some useful information
396
+ pos := 0;
397
+ hashlen := SEMIGROUPS.OptionsRec(S).hashlen;
398
+ ht := HTCreate([1, 1], rec(forflatplainlists := true,
399
+ treehashsize := hashlen));
400
+ right := OutNeighbours(RightCayleyDigraph(idsmgp));
401
+ genstoapply := [1 .. Length(right[1])];
402
+
403
+ #
404
+ # The functions that do the work:
405
+ #
406
+ NormalClosureInverseSemigroup := function(S, K, coll)
407
+ local T, opts, x, list;
408
+ # This takes an inv smgp S, an inv subsemigroup K, and some elms coll,
409
+ # then creates the *normal closure* of K with coll inside S.
410
+ # It assumes K is already normal.
411
+ T := ClosureInverseSemigroup(K, coll);
412
+ while K <> T do
413
+ K := T;
414
+ opts := rec();
415
+ opts.gradingfunc := {o, x} -> x in K;
416
+ opts.onlygrades := {x, data} -> x = false;
417
+ opts.onlygradesdata := fail;
418
+ for x in K do
419
+ list := Enumerate(Orb(GeneratorsOfSemigroup(S), x, OnPoints, opts));
420
+ list := AsList(list);
421
+ T := ClosureInverseSemigroup(T, list);
422
+ od;
423
+ od;
424
+ return K;
425
+ end;
426
+
427
+ enumerate_trace := function()
428
+ local a, j, x, y, z;
429
+ if pos = 0 then
430
+ # Add the generating pairs themselves
431
+ for x in pairstoapply do
432
+ if x[1] <> x[2] and HTValue(ht, x) = fail then
433
+ HTAdd(ht, x, true);
434
+ Unite(traceUF, x[1], x[2]);
435
+ # Add each pair's "conjugate" pairs
436
+ for a in GeneratorsOfSemigroup(S) do
437
+ z := [PositionCanonical(idsmgp, a ^ -1 * idslist[x[1]] * a),
438
+ PositionCanonical(idsmgp, a ^ -1 * idslist[x[2]] * a)];
439
+ if z[1] <> z[2] and HTValue(ht, z) = fail then
440
+ HTAdd(ht, z, true);
441
+ nr := nr + 1;
442
+ pairstoapply[nr] := z;
443
+ Unite(traceUF, z[1], z[2]);
444
+ fi;
445
+ od;
446
+ fi;
447
+ od;
448
+ fi;
449
+
450
+ while pos < nr do
451
+ pos := pos + 1;
452
+ x := pairstoapply[pos];
453
+ for j in genstoapply do
454
+ # Add the pair's right-multiples (idsmgp is commutative)
455
+ y := [right[x[1]][j], right[x[2]][j]];
456
+ if y[1] <> y[2] and HTValue(ht, y) = fail then
457
+ HTAdd(ht, y, true);
458
+ nr := nr + 1;
459
+ pairstoapply[nr] := y;
460
+ Unite(traceUF, y[1], y[2]);
461
+ # Add the pair's "conjugate" pairs
462
+ for a in GeneratorsOfSemigroup(S) do
463
+ z := [PositionCanonical(idsmgp, a ^ -1 * idslist[x[1]] * a),
464
+ PositionCanonical(idsmgp, a ^ -1 * idslist[x[2]] * a)];
465
+ if z[1] <> z[2] and HTValue(ht, z) = fail then
466
+ HTAdd(ht, z, true);
467
+ nr := nr + 1;
468
+ pairstoapply[nr] := z;
469
+ Unite(traceUF, z[1], z[2]);
470
+ fi;
471
+ od;
472
+ fi;
473
+ od;
474
+ od;
475
+ end;
476
+
477
+ enforce_conditions := function()
478
+ local traceTable, traceBlocks, a, e, f, classno, blocks, bl, N;
479
+ blocks := PartsOfPartitionDS(traceUF);
480
+ traceBlocks := [];
481
+ for bl in blocks do
482
+ traceBlocks[Representative(traceUF, bl[1])] := bl;
483
+ od;
484
+ N := SizeUnderlyingSetDS(traceUF);
485
+ traceTable := List([1 .. N], x -> Representative(traceUF, x));
486
+ for a in slist do
487
+ if a in kernel then
488
+ e := PositionCanonical(idsmgp, LeftOne(a));
489
+ f := PositionCanonical(idsmgp, RightOne(a));
490
+ if traceTable[e] <> traceTable[f] then
491
+ nr := nr + 1;
492
+ pairstoapply[nr] := [e, f];
493
+ fi;
494
+ else
495
+ classno := traceTable[PositionCanonical(idsmgp, RightOne(a))];
496
+ for e in traceBlocks[classno] do
497
+ if a * idslist[e] in kernel then
498
+ nrk := nrk + 1;
499
+ AddSet(kernelgenstoapply, a);
500
+ break;
501
+ # JDM is this correct? Why repeatedly add the same a to
502
+ # kernelgenstoapply?
503
+ fi;
504
+ od;
505
+ fi;
506
+ od;
507
+ end;
508
+
509
+ compute_kernel := function()
510
+ # Take the normal closure inverse semigroup containing the new elements
511
+ if kernelgenstoapply <> [] then
512
+ kernel := NormalClosureInverseSemigroup(S, kernel,
513
+ kernelgenstoapply);
514
+ Enumerate(kernel);
515
+ kernelgenstoapply := [];
516
+ nrk := 0;
517
+ fi;
518
+ end;
519
+
520
+ # Keep applying the method until no new info is found
521
+ repeat
522
+ oldLookup := canonical_lookup(traceUF);
523
+ oldKernel := kernel;
524
+ compute_kernel();
525
+ enforce_conditions();
526
+ enumerate_trace();
527
+ trace_unchanged := (oldLookup = canonical_lookup(traceUF));
528
+ kernel_unchanged := (oldKernel = kernel);
529
+ Info(InfoSemigroups, 3, "lookup: ", trace_unchanged);
530
+ Info(InfoSemigroups, 3, "kernel: ", kernel_unchanged);
531
+ Info(InfoSemigroups, 3, "nrk = 0: ", nrk = 0);
532
+ until trace_unchanged and kernel_unchanged and (nrk = 0);
533
+
534
+ # Convert traceLookup to traceBlocks
535
+ traceBlocks := List(Compacted(PartsOfPartitionDS(traceUF)),
536
+ b -> List(b, i -> idslist[i]));
537
+
538
+ return InverseSemigroupCongruenceByKernelTraceNC(S, kernel, traceBlocks);
539
+ end;
540
+
541
+ InstallMethod(MinimumGroupCongruence,
542
+ "for an inverse semigroup with inverse op",
543
+ [IsInverseSemigroup and IsGeneratorsOfInverseSemigroup],
544
+ # This is the maximum congruence whose quotient is a group
545
+ function(S)
546
+ local ker, leq, n, x, traceBlocks;
547
+
548
+ # Kernel should be the majorant closure of the idempotents
549
+ ker := IdempotentGeneratedSubsemigroup(S);
550
+ leq := NaturalLeqInverseSemigroup(S);
551
+ for n in ker do
552
+ for x in S do
553
+ if leq(n, x) and not x in ker then
554
+ ker := ClosureInverseSemigroup(ker, x);
555
+ fi;
556
+ od;
557
+ od;
558
+ ker := InverseSemigroup(SmallInverseSemigroupGeneratingSet(ker));
559
+
560
+ # Trace should be the universal congruence
561
+ traceBlocks := [Idempotents(S)];
562
+
563
+ return InverseSemigroupCongruenceByKernelTraceNC(S, ker, traceBlocks);
564
+ end);
565
+
566
+ # TODO(later) this is a completely generic version implementation, surely we
567
+ # can do better than this!
568
+
569
+ InstallMethod(GeneratingPairsOfMagmaCongruence,
570
+ "for inverse semigroup congruence by kernel and trace",
571
+ [IsInverseSemigroupCongruenceByKernelTrace],
572
+ function(C)
573
+ local CC, pairs, class, i, j;
574
+
575
+ CC := SemigroupCongruenceByGeneratingPairs(Source(C), []);
576
+ for class in EquivalenceRelationPartition(C) do
577
+ for i in [1 .. Length(class) - 1] do
578
+ for j in [i + 1 .. Length(class)] do
579
+ if not [class[i], class[j]] in CC then
580
+ pairs := GeneratingPairsOfSemigroupCongruence(CC);
581
+ pairs := Concatenation(pairs, [[class[i], class[j]]]);
582
+ CC := SemigroupCongruenceByGeneratingPairs(Source(C), pairs);
583
+ fi;
584
+ od;
585
+ od;
586
+ od;
587
+ return GeneratingPairsOfSemigroupCongruence(CC);
588
+ end);
589
+
@@ -0,0 +1,101 @@
1
+ ############################################################################
2
+ ##
3
+ ## congruences/conglatt.gd
4
+ ## Copyright (C) 2016-2022 Michael C. Young
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ #############################################################################
9
+ ##
10
+ ## This file contains functions for a poset of congruences.
11
+ ##
12
+ ## When the congruences of a semigroup are computed, they form a lattice with
13
+ ## respect to containment. The information about the congruences' positions in
14
+ ## this lattice may be stored in an IsCongruencePoset object (a component object
15
+ ## based on a record) and can be retrieved from this object using the methods in
16
+ ## this file.
17
+ ##
18
+
19
+ DeclareCategory("IsCongruencePoset", IsDigraph);
20
+
21
+ DeclareAttribute("UnderlyingSemigroupOfCongruencePoset", IsCongruencePoset);
22
+ DeclareAttribute("PosetOfPrincipalCongruences", IsCongruencePoset);
23
+ DeclareAttribute("JoinSemilatticeOfCongruences", IsCongruencePoset);
24
+ DeclareAttribute("MinimalCongruences", IsCongruencePoset);
25
+
26
+ DeclareAttribute("CongruencesOfPoset", IsCongruencePoset);
27
+
28
+ # Constructs the poset object consisting of the congruences given in the
29
+ # argument.
30
+ DeclareOperation("PosetOfCongruences", [IsListOrCollection]);
31
+ DeclareAttribute("JoinSemilatticeOfCongruences", IsListOrCollection);
32
+
33
+ DeclareAttribute("GeneratingPairsOfPrincipalCongruences", IsSemigroup);
34
+ DeclareAttribute("GeneratingPairsOfPrincipalLeftCongruences", IsSemigroup);
35
+ DeclareAttribute("GeneratingPairsOfPrincipalRightCongruences", IsSemigroup);
36
+
37
+ DeclareAttribute("PosetOfPrincipalCongruences", IsSemigroup);
38
+ DeclareAttribute("PosetOfPrincipalLeftCongruences", IsSemigroup);
39
+ DeclareAttribute("PosetOfPrincipalRightCongruences", IsSemigroup);
40
+
41
+ DeclareOperation("PosetOfPrincipalCongruences",
42
+ [IsSemigroup, IsListOrCollection]);
43
+ DeclareOperation("PosetOfPrincipalLeftCongruences",
44
+ [IsSemigroup, IsListOrCollection]);
45
+ DeclareOperation("PosetOfPrincipalRightCongruences",
46
+ [IsSemigroup, IsListOrCollection]);
47
+
48
+ DeclareAttribute("LatticeOfCongruences", IsSemigroup);
49
+ DeclareAttribute("LatticeOfLeftCongruences", IsSemigroup);
50
+ DeclareAttribute("LatticeOfRightCongruences", IsSemigroup);
51
+
52
+ DeclareAttribute("CayleyDigraphOfCongruences", IsSemigroup);
53
+ DeclareAttribute("CayleyDigraphOfLeftCongruences", IsSemigroup);
54
+ DeclareAttribute("CayleyDigraphOfRightCongruences", IsSemigroup);
55
+
56
+ DeclareOperation("CayleyDigraphOfCongruences",
57
+ [IsSemigroup, IsListOrCollection]);
58
+ DeclareOperation("CayleyDigraphOfLeftCongruences",
59
+ [IsSemigroup, IsListOrCollection]);
60
+ DeclareOperation("CayleyDigraphOfRightCongruences",
61
+ [IsSemigroup, IsListOrCollection]);
62
+
63
+ DeclareCategory("IsCayleyDigraphOfCongruences", IsCongruencePoset);
64
+
65
+ DeclareOperation("LatticeOfCongruences",
66
+ [IsSemigroup, IsListOrCollection]);
67
+ DeclareOperation("LatticeOfLeftCongruences",
68
+ [IsSemigroup, IsListOrCollection]);
69
+ DeclareOperation("LatticeOfRightCongruences",
70
+ [IsSemigroup, IsListOrCollection]);
71
+
72
+ DeclareAttribute("CongruencesOfSemigroup", IsSemigroup);
73
+ DeclareAttribute("LeftCongruencesOfSemigroup", IsSemigroup);
74
+ DeclareAttribute("RightCongruencesOfSemigroup", IsSemigroup);
75
+
76
+ DeclareAttribute("MinimalCongruencesOfSemigroup", IsSemigroup);
77
+ DeclareAttribute("MinimalLeftCongruencesOfSemigroup", IsSemigroup);
78
+ DeclareAttribute("MinimalRightCongruencesOfSemigroup", IsSemigroup);
79
+
80
+ DeclareOperation("MinimalCongruencesOfSemigroup",
81
+ [IsSemigroup, IsListOrCollection]);
82
+ DeclareOperation("MinimalCongruencesOfSemigroup",
83
+ [IsSemigroup, IsIterator]);
84
+
85
+ DeclareOperation("MinimalLeftCongruencesOfSemigroup",
86
+ [IsSemigroup, IsListOrCollection]);
87
+ DeclareOperation("MinimalRightCongruencesOfSemigroup",
88
+ [IsSemigroup, IsListOrCollection]);
89
+
90
+ DeclareAttribute("PrincipalCongruencesOfSemigroup", IsSemigroup);
91
+ DeclareAttribute("PrincipalLeftCongruencesOfSemigroup", IsSemigroup);
92
+ DeclareAttribute("PrincipalRightCongruencesOfSemigroup", IsSemigroup);
93
+
94
+ DeclareOperation("PrincipalCongruencesOfSemigroup",
95
+ [IsSemigroup, IsListOrCollection]);
96
+ DeclareOperation("PrincipalLeftCongruencesOfSemigroup",
97
+ [IsSemigroup, IsListOrCollection]);
98
+ DeclareOperation("PrincipalRightCongruencesOfSemigroup",
99
+ [IsSemigroup, IsListOrCollection]);
100
+
101
+ DeclareAttribute("GeneratingCongruencesOfJoinSemilattice", IsCongruencePoset);