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,154 @@
1
+ ############################################################################
2
+ ##
3
+ ## congruences/cong.gd
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 declarations for functions, operations and attributes of
11
+ ## semigroup congruences that do not depend on any particular representation.
12
+ ## Methods for most of these are implemented for specific types of congruence
13
+ ## in the following files:
14
+ ##
15
+ ## congpart.gi - for congruences that can compute
16
+ ## EquivalenceRelationPartition
17
+ ## conginv.gi - Inverse semigroups
18
+ ## congpairs.gi - Congruences with generating pairs
19
+ ## congrees.gi - Rees congruences
20
+ ## congrms.gi - (0-)simple Rees matrix semigroups
21
+ ## congsimple.gi - (0-)simple semigroups
22
+ ## conguniv.gi - Universal congruences
23
+ ##
24
+ ## Some general functions are also implemented in cong.gi, when these do not
25
+ ## depend on the particular representation of the congruences, or that anything
26
+ ## other than what is implemented in the GAP library is required. Most of the
27
+ ## operations etc declared in this file are not implemented in cong.gi, but are
28
+ ## declared here for congruences in general.
29
+
30
+ ###############################################################################
31
+ # IsLeft/Right/SemigroupCongruence is a property, but
32
+ # IsLeft/Right/MagmaCongruence is a category so we use them in conjunction to
33
+ # mean i.e. a left congruence on a semigroup that was created in the category
34
+ # of left congruences. We introduce synonyms for these to simplify their use.
35
+ #
36
+ # Note that IsMagmaCongruence implies IsLeftMagmaCongruence and
37
+ # IsRightMagmaCongruence, and so IsLeftMagmaCongruence and
38
+ # IsLeftSemigroupCongruence returns true when applied to a 2-sided congruence.
39
+ # In other words, we cannot use IsLeftMagmaCongruence to determine whether or
40
+ # not a congruence was created as a left congruence or not (we can use
41
+ # IsLeftMagmaCongruence and not IsRightMagmaCongruence).
42
+ ###############################################################################
43
+
44
+ DeclareProperty("IsLeftRightOrTwoSidedCongruence",
45
+ IsLeftMagmaCongruence and IsLeftSemigroupCongruence);
46
+ DeclareProperty("IsLeftRightOrTwoSidedCongruence",
47
+ IsRightMagmaCongruence and IsRightSemigroupCongruence);
48
+ DeclareProperty("IsLeftRightOrTwoSidedCongruence",
49
+ IsMagmaCongruence and IsSemigroupCongruence);
50
+
51
+ InstallTrueMethod(IsLeftRightOrTwoSidedCongruence,
52
+ IsLeftMagmaCongruence and IsLeftSemigroupCongruence);
53
+ InstallTrueMethod(IsLeftRightOrTwoSidedCongruence,
54
+ IsRightMagmaCongruence and IsRightSemigroupCongruence);
55
+ InstallTrueMethod(IsLeftRightOrTwoSidedCongruence,
56
+ IsMagmaCongruence and IsSemigroupCongruence);
57
+
58
+ # The next attributes allows us to recover the category/string from a
59
+ # left/right/2-sided congruence object
60
+ DeclareAttribute("CongruenceHandednessString",
61
+ IsLeftRightOrTwoSidedCongruence);
62
+
63
+ ############################################################################
64
+ # We introduce the property IsLeftRightOrTwoSidedCongruenceClass in a similar
65
+ # vein to IsLeftRightOrTwoSidedCongruence. Since we declare
66
+ # IsLeftCongruenceClass and IsRightCongruenceClass we could define them to
67
+ # satisfy IsLeftRightOrTwoSidedCongruenceClass, but then we have to declare
68
+ # IsLeftRightOrTwoSidedCongruenceClass as a being a property of
69
+ # IsEquivalenceClass, which means we then have to fiddle more with ranks of
70
+ # methods.
71
+ ############################################################################
72
+
73
+ # IsCongruenceClass is declared in gap/lib/mgmcong.gd:140
74
+ # but it does not include IsAttributeStoringRep
75
+ DeclareCategory("IsLeftCongruenceClass",
76
+ IsEquivalenceClass and IsAttributeStoringRep);
77
+ DeclareCategory("IsRightCongruenceClass",
78
+ IsEquivalenceClass and IsAttributeStoringRep);
79
+
80
+ DeclareProperty("IsLeftRightOrTwoSidedCongruenceClass",
81
+ IsLeftCongruenceClass);
82
+ DeclareProperty("IsLeftRightOrTwoSidedCongruenceClass",
83
+ IsRightCongruenceClass);
84
+ DeclareProperty("IsLeftRightOrTwoSidedCongruenceClass",
85
+ IsCongruenceClass);
86
+
87
+ InstallTrueMethod(IsLeftRightOrTwoSidedCongruenceClass,
88
+ IsLeftCongruenceClass);
89
+ InstallTrueMethod(IsLeftRightOrTwoSidedCongruenceClass,
90
+ IsRightCongruenceClass);
91
+ InstallTrueMethod(IsLeftRightOrTwoSidedCongruenceClass,
92
+ IsCongruenceClass);
93
+
94
+ ########################################################################
95
+ # Congruences
96
+ ########################################################################
97
+
98
+ # Flexible functions for creating congruences
99
+ DeclareGlobalFunction("SemigroupCongruence");
100
+ DeclareGlobalFunction("LeftSemigroupCongruence");
101
+ DeclareGlobalFunction("RightSemigroupCongruence");
102
+
103
+ DeclareAttribute("TrivialCongruence", IsSemigroup);
104
+
105
+ # Properties of congruences
106
+ DeclareProperty("IsRightSemigroupCongruence", IsLeftSemigroupCongruence);
107
+ DeclareProperty("IsSemigroupCongruence", IsLeftSemigroupCongruence);
108
+
109
+ DeclareAttribute("NrEquivalenceClasses",
110
+ IsEquivalenceRelation);
111
+ DeclareAttribute("NonTrivialEquivalenceClasses",
112
+ IsEquivalenceRelation);
113
+ DeclareAttribute("EquivalenceRelationLookup",
114
+ IsEquivalenceRelation);
115
+ DeclareAttribute("EquivalenceRelationCanonicalLookup",
116
+ IsEquivalenceRelation);
117
+ DeclareAttribute("EquivalenceRelationCanonicalPartition",
118
+ IsEquivalenceRelation);
119
+ DeclareAttribute("EquivalenceRelationPartitionWithSingletons",
120
+ IsEquivalenceRelation);
121
+
122
+ # No-checks version of the "\in" operation
123
+ DeclareOperation("CongruenceTestMembershipNC",
124
+ [IsLeftRightOrTwoSidedCongruence,
125
+ IsMultiplicativeElement,
126
+ IsMultiplicativeElement]);
127
+
128
+ # Algebraic operators
129
+ DeclareOperation("JoinLeftSemigroupCongruences",
130
+ [IsLeftSemigroupCongruence, IsLeftSemigroupCongruence]);
131
+ DeclareOperation("JoinRightSemigroupCongruences",
132
+ [IsRightSemigroupCongruence, IsRightSemigroupCongruence]);
133
+ DeclareOperation("MeetLeftSemigroupCongruences",
134
+ [IsLeftSemigroupCongruence, IsLeftSemigroupCongruence]);
135
+ DeclareOperation("MeetRightSemigroupCongruences",
136
+ [IsRightSemigroupCongruence, IsRightSemigroupCongruence]);
137
+
138
+ # Comparison operators
139
+ DeclareOperation("IsSubrelation",
140
+ [IsEquivalenceRelation, IsEquivalenceRelation]);
141
+ DeclareOperation("IsSuperrelation",
142
+ [IsEquivalenceRelation, IsEquivalenceRelation]);
143
+
144
+ ########################################################################
145
+ # Congruence classes
146
+ ########################################################################
147
+
148
+ # Actions
149
+ DeclareOperation("OnLeftCongruenceClasses",
150
+ [IsLeftRightOrTwoSidedCongruenceClass,
151
+ IsMultiplicativeElement]);
152
+ DeclareOperation("OnRightCongruenceClasses",
153
+ [IsLeftRightOrTwoSidedCongruenceClass,
154
+ IsMultiplicativeElement]);
@@ -0,0 +1,351 @@
1
+ ############################################################################
2
+ ##
3
+ ## congruences/cong.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 some general functions, operations and attributes of
11
+ ## semigroup congruences. Methods for specific types of congruence are
12
+ ## implemented in the following files:
13
+ ##
14
+ ## conginv.gi - Inverse semigroups
15
+ ## congpairs.gi - Congruences with generating pairs
16
+ ## congrees.gi - Rees congruences
17
+ ## congrms.gi - (0-)simple Rees matrix semigroups
18
+ ## congsimple.gi - (0-)simple semigroups
19
+ ## conguniv.gi - Universal congruences
20
+ ##
21
+ ## cong.gd contains declarations for many of these.
22
+ ##
23
+
24
+ # This file contains implementations of methods for congruences that don't
25
+ # assume any particular representation.
26
+
27
+ ########################################################################
28
+ # 0. Categories
29
+ ########################################################################
30
+
31
+ InstallMethod(CongruenceHandednessString, "for a right congruence",
32
+ [IsRightMagmaCongruence and IsRightSemigroupCongruence], C -> "right");
33
+
34
+ InstallMethod(CongruenceHandednessString, "for a left congruence",
35
+ [IsLeftMagmaCongruence and IsLeftSemigroupCongruence], C -> "left");
36
+
37
+ InstallMethod(CongruenceHandednessString, "for a 2-sided congruence",
38
+ [IsMagmaCongruence and IsSemigroupCongruence], C -> "2-sided");
39
+
40
+ # This is required for QuotientSemigroups and their subsemigroups.
41
+ InstallImmediateMethod(CanEasilyCompareElements,
42
+ IsCongruenceClass and HasEquivalenceClassRelation, 0,
43
+ C -> CanUseLibsemigroupsCongruence(EquivalenceClassRelation(C)));
44
+
45
+ ########################################################################
46
+ # Flexible functions for creating congruences
47
+ ########################################################################
48
+
49
+ InstallGlobalFunction(SemigroupCongruence,
50
+ function(arg...)
51
+ local S, opts, s_opts, x, pairs, cong;
52
+ if not Length(arg) >= 2 then
53
+ ErrorNoReturn("at least 2 arguments are required");
54
+ elif not IsSemigroup(arg[1]) then
55
+ ErrorNoReturn("the 1st argument is not a semigroup");
56
+ fi;
57
+ S := arg[1];
58
+
59
+ # Set up any options
60
+ if IsRecord(Last(arg)) then
61
+ opts := Last(arg);
62
+ arg := arg{[1 .. Length(arg) - 1]};
63
+ else
64
+ opts := rec();
65
+ fi;
66
+ s_opts := SEMIGROUPS.OptionsRec(S);
67
+ for x in RecNames(s_opts) do
68
+ if not IsBound(opts.(x)) then
69
+ opts.(x) := s_opts.(x);
70
+ fi;
71
+ od;
72
+
73
+ if IsHomogeneousList(arg[2]) then
74
+ # We should have a list of generating pairs
75
+ if Length(arg) = 2 then
76
+ pairs := arg[2];
77
+ if not IsEmpty(pairs) then
78
+ if (not IsList(pairs[1])) or IsMatrixObj(pairs[1]) then
79
+ pairs := [pairs];
80
+ fi;
81
+ fi;
82
+ elif Length(arg) > 2 then
83
+ pairs := arg{[2 .. Length(arg)]};
84
+ fi;
85
+ if not ForAll(pairs, p -> Size(p) = 2) then
86
+ ErrorNoReturn("the 2nd argument (a list of lists) contains lists ",
87
+ "of size not equal to 2");
88
+ elif not ForAll(pairs, p -> p[1] in S and p[2] in S) then
89
+ ErrorNoReturn("the 2nd argument (a list of lists) contains items ",
90
+ "that do not belong to the 1st argument (a semigroup)");
91
+ fi;
92
+
93
+ # Remove any reflexive pairs
94
+ pairs := Filtered(pairs, p -> p[1] <> p[2]);
95
+
96
+ # Decide which representation to use
97
+ if not IsFinite(S)
98
+ or ((HasIsSimpleSemigroup(S) or IsActingSemigroup(S)
99
+ or HasSize(S) or IsReesMatrixSemigroup(S))
100
+ and IsSimpleSemigroup(S)) or
101
+ ((HasIsZeroSimpleSemigroup(S) or IsActingSemigroup(S)
102
+ or HasSize(S) or IsReesZeroMatrixSemigroup(S))
103
+ and IsZeroSimpleSemigroup(S)) then
104
+ return SemigroupCongruenceByGeneratingPairs(S, pairs);
105
+ elif IsInverseSemigroup(S) and IsGeneratorsOfInverseSemigroup(S) and
106
+ Size(S) >= opts.cong_by_ker_trace_threshold then
107
+ cong := SemigroupCongruenceByGeneratingPairs(S, pairs);
108
+ cong := AsInverseSemigroupCongruenceByKernelTrace(cong);
109
+ SetGeneratingPairsOfMagmaCongruence(cong, pairs);
110
+ return cong;
111
+ else
112
+ return SemigroupCongruenceByGeneratingPairs(S, pairs);
113
+ fi;
114
+ elif IsGeneralMapping(arg[2]) and
115
+ ((IsRMSCongruenceByLinkedTriple(arg[3]) and IsSimpleSemigroup(S))
116
+ or (IsRZMSCongruenceByLinkedTriple(arg[3]) and IsZeroSimpleSemigroup(S)))
117
+ then
118
+ # We should have a congruence of an isomorphic RMS/RZMS
119
+ if Range(arg[2]) = Range(arg[3]) and S = Source(arg[2]) then
120
+ return CongruenceByIsomorphism(arg[2], arg[3]);
121
+ else
122
+ ErrorNoReturn("the range of the 3rd argument (a congruence) is ",
123
+ "not a Rees (0-)matrix semigroup isomorphic to the ",
124
+ "1st argument");
125
+ fi;
126
+ elif HasIsSemigroupIdeal(arg[2])
127
+ and IsSemigroupIdeal(arg[2])
128
+ and Parent(arg[2]) = S then
129
+ return ReesCongruenceOfSemigroupIdeal(arg[2]);
130
+ elif Length(arg) = 3
131
+ and IsInverseSemigroup(arg[2])
132
+ and IsGeneratorsOfInverseSemigroup(arg[2])
133
+ and IsDenseList(arg[3])
134
+ and IsInverseSemigroup(S)
135
+ and IsGeneratorsOfInverseSemigroup(S) then
136
+ # We should have the kernel and trace of a congruence on an inverse
137
+ # semigroup
138
+ return InverseSemigroupCongruenceByKernelTrace(S, arg[2], arg[3]);
139
+ fi;
140
+ ErrorNoReturn("the arguments are not valid for this function");
141
+ end);
142
+
143
+ BindGlobal("_LeftOrRightCong",
144
+ function(CongruenceConstructor, arg)
145
+ local S, pairs;
146
+ if not Length(arg) >= 2 then
147
+ ErrorNoReturn("at least 2 arguments are required");
148
+ elif not IsSemigroup(arg[1]) then
149
+ ErrorNoReturn("the 1st argument is not a semigroup");
150
+ fi;
151
+ S := arg[1];
152
+
153
+ if IsHomogeneousList(arg[2]) then
154
+ # We should have a list of generating pairs
155
+ if Length(arg) = 2 then
156
+ pairs := arg[2];
157
+ if not IsEmpty(pairs) and not IsList(pairs[1]) then
158
+ pairs := [pairs];
159
+ fi;
160
+ elif Length(arg) > 2 then
161
+ pairs := arg{[2 .. Length(arg)]};
162
+ fi;
163
+ if not ForAll(pairs, p -> Size(p) = 2) then
164
+ ErrorNoReturn("the 2nd argument (a list of lists) contains lists ",
165
+ "of size not equal to 2");
166
+ elif not ForAll(pairs, p -> p[1] in S and p[2] in S) then
167
+ ErrorNoReturn("the 2nd argument (a list of lists) contains items ",
168
+ "that do not belong to the 1st argument (a semigroup)");
169
+ fi;
170
+ # Remove any reflexive pairs
171
+ pairs := Filtered(pairs, p -> p[1] <> p[2]);
172
+ return CongruenceConstructor(S, pairs);
173
+ else
174
+ ErrorNoReturn("the arguments are not valid for this function");
175
+ fi;
176
+ end);
177
+
178
+ InstallGlobalFunction(LeftSemigroupCongruence,
179
+ # Can't be a lambda because arg has a special meaning here
180
+ function(arg...)
181
+ return _LeftOrRightCong(LeftSemigroupCongruenceByGeneratingPairs, arg);
182
+ end);
183
+
184
+ InstallGlobalFunction(RightSemigroupCongruence,
185
+ # Can't be a lambda because arg has a special meaning here
186
+ function(arg...)
187
+ return _LeftOrRightCong(RightSemigroupCongruenceByGeneratingPairs, arg);
188
+ end);
189
+
190
+ ########################################################################
191
+ # Trivial congruence
192
+ ########################################################################
193
+
194
+ InstallMethod(TrivialCongruence, "for a semigroup",
195
+ [IsSemigroup], S -> SemigroupCongruence(S, []));
196
+
197
+ ########################################################################
198
+ # Congruence operators
199
+ ########################################################################
200
+
201
+ InstallMethod(IsSuperrelation, "for semigroup congruences",
202
+ [IsLeftRightOrTwoSidedCongruence, IsLeftRightOrTwoSidedCongruence],
203
+ {lhop, rhop} -> IsSubrelation(rhop, lhop));
204
+
205
+ ########################################################################
206
+ # Congruence classes
207
+ ########################################################################
208
+
209
+ InstallMethod(EquivalenceClassOfElement,
210
+ "for a left, right, or 2-sided semigroup congruence and mult. elt.",
211
+ [IsLeftRightOrTwoSidedCongruence, IsMultiplicativeElement],
212
+ function(C, x)
213
+ if not x in Range(C) then
214
+ ErrorNoReturn("the 2nd argument (a mult. elt.) does not belong ",
215
+ "to the range of the 1st argument (a ",
216
+ CongruenceHandednessString(C),
217
+ " congruence)");
218
+ fi;
219
+ return EquivalenceClassOfElementNC(C, x);
220
+ end);
221
+
222
+ InstallMethod(EquivalenceClassOfElementNC,
223
+ "for a left, right, or 2-sided congruence and mult. elt.",
224
+ [IsLeftRightOrTwoSidedCongruence, IsMultiplicativeElement],
225
+ function(C, x)
226
+ local filt, class;
227
+ if IsMagmaCongruence(C) then
228
+ # IsCongruenceClass is declared in the GAP library and it does not belong
229
+ # to IsAttributeStoringRep
230
+ filt := IsCongruenceClass and IsAttributeStoringRep;
231
+ elif IsLeftMagmaCongruence(C) then
232
+ # IsLeftCongruenceClass is declared in the Semigroups pkg and does belong
233
+ # to IsAttributeStoringRep
234
+ filt := IsLeftCongruenceClass;
235
+ else
236
+ Assert(1, IsRightMagmaCongruence(C));
237
+ filt := IsRightCongruenceClass;
238
+ fi;
239
+
240
+ class := Objectify(NewType(FamilyObj(Range(C)), filt), rec());
241
+ SetParentAttr(class, Range(C));
242
+ SetEquivalenceClassRelation(class, C);
243
+ SetRepresentative(class, x);
244
+ if HasIsFinite(Range(C)) and IsFinite(Range(C)) then
245
+ SetIsFinite(class, true);
246
+ fi;
247
+
248
+ return class;
249
+ end);
250
+
251
+ ########################################################################
252
+ # Congruence class attributes
253
+ ########################################################################
254
+
255
+ # Maybe these should only be for CanComputeEquivalenceRelationPartition?
256
+
257
+ InstallMethod(AsList,
258
+ "for a class of a left, right, or 2-sided semigroup congruence",
259
+ [IsLeftRightOrTwoSidedCongruenceClass],
260
+ C -> ImagesElm(EquivalenceClassRelation(C), Representative(C)));
261
+
262
+ InstallMethod(Enumerator,
263
+ "for a class of a left, right, or 2-sided semigroup congruence",
264
+ [IsLeftRightOrTwoSidedCongruenceClass],
265
+ 6, # To beat the library method for magma congruence classes
266
+ AsList);
267
+
268
+ InstallMethod(Size,
269
+ "for a class of a left, right, or 2-sided semigroup congruence",
270
+ [IsLeftRightOrTwoSidedCongruenceClass],
271
+ C -> Size(AsList(C)));
272
+
273
+ ########################################################################
274
+ # Congruence class operators
275
+ ########################################################################
276
+
277
+ # Multiplication for congruence classes: only makes sense for 2-sided
278
+ InstallMethod(\*, "for two congruence classes",
279
+ [IsCongruenceClass, IsCongruenceClass],
280
+ function(lhop, rhop)
281
+ if EquivalenceClassRelation(lhop) <> EquivalenceClassRelation(rhop) then
282
+ ErrorNoReturn("the arguments (cong. classes) are not classes of the same ",
283
+ "congruence");
284
+ fi;
285
+ return EquivalenceClassOfElementNC(EquivalenceClassRelation(lhop),
286
+ Representative(lhop) *
287
+ Representative(rhop));
288
+ end);
289
+
290
+ InstallMethod(\=,
291
+ "for classes of a left, right, or 2-sided semigroup congruence",
292
+ IsIdenticalObj,
293
+ [IsLeftRightOrTwoSidedCongruenceClass, IsLeftRightOrTwoSidedCongruenceClass],
294
+ function(lhop, rhop)
295
+ return EquivalenceClassRelation(lhop) = EquivalenceClassRelation(rhop)
296
+ and [Representative(lhop), Representative(rhop)]
297
+ in EquivalenceClassRelation(lhop);
298
+ end);
299
+
300
+ InstallMethod(\in,
301
+ "for a mult. elt. and a class of a left, right or 2-sided congruence",
302
+ [IsMultiplicativeElement, IsLeftRightOrTwoSidedCongruenceClass],
303
+ 3, # to beat the library method
304
+ function(x, class)
305
+ local C;
306
+ C := EquivalenceClassRelation(class);
307
+ return x in Range(C) and [x, Representative(class)] in C;
308
+ end);
309
+
310
+ InstallMethod(ViewObj,
311
+ "for a left, right, or 2-sided congruence class",
312
+ [IsLeftRightOrTwoSidedCongruenceClass],
313
+ function(C)
314
+ local string;
315
+ string := CongruenceHandednessString(EquivalenceClassRelation(C));
316
+ Print("<", string, " congruence class of ");
317
+ ViewObj(Representative(C));
318
+ Print(">");
319
+ end);
320
+
321
+ ########################################################################
322
+ # Congruence class actions
323
+ ########################################################################
324
+
325
+ InstallMethod(OnLeftCongruenceClasses,
326
+ "for a left congruence class and a multiplicative element",
327
+ [IsLeftRightOrTwoSidedCongruenceClass, IsMultiplicativeElement],
328
+ function(class, x)
329
+ local C;
330
+ # This is necessary because IsCongruenceClass is not a sub-category of
331
+ # IsLeftCongruenceClass or IsRightCongruenceClass
332
+ if IsRightCongruenceClass(class) then
333
+ TryNextMethod();
334
+ fi;
335
+ C := EquivalenceClassRelation(class);
336
+ return EquivalenceClassOfElementNC(C, x * Representative(class));
337
+ end);
338
+
339
+ InstallMethod(OnRightCongruenceClasses,
340
+ "for a right congruence class and a multiplicative element",
341
+ [IsLeftRightOrTwoSidedCongruenceClass, IsMultiplicativeElement],
342
+ function(class, x)
343
+ local C;
344
+ # This is necessary because IsCongruenceClass is not a sub-category of
345
+ # IsLeftCongruenceClass or IsRightCongruenceClass
346
+ if IsLeftCongruenceClass(class) then
347
+ TryNextMethod();
348
+ fi;
349
+ C := EquivalenceClassRelation(class);
350
+ return EquivalenceClassOfElementNC(C, Representative(class) * x);
351
+ end);
@@ -0,0 +1,38 @@
1
+ ############################################################################
2
+ ##
3
+ ## congruences/conginv.gd
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 - see Howie 5.3
12
+ ##
13
+
14
+ # Inverse Congruences By Kernel and Trace
15
+ DeclareCategory("IsInverseSemigroupCongruenceByKernelTrace",
16
+ IsSemigroupCongruence
17
+ and IsMagmaCongruence
18
+ and CanComputeEquivalenceRelationPartition
19
+ and IsAttributeStoringRep
20
+ and IsFinite);
21
+ DeclareGlobalFunction("InverseSemigroupCongruenceByKernelTrace");
22
+ DeclareGlobalFunction("InverseSemigroupCongruenceByKernelTraceNC");
23
+
24
+ DeclareAttribute("TraceOfSemigroupCongruence", IsSemigroupCongruence);
25
+ DeclareAttribute("KernelOfSemigroupCongruence", IsSemigroupCongruence);
26
+ DeclareAttribute("AsInverseSemigroupCongruenceByKernelTrace",
27
+ IsSemigroupCongruence);
28
+ DeclareAttribute("InverseSemigroupCongruenceClassByKernelTraceType",
29
+ IsInverseSemigroupCongruenceByKernelTrace);
30
+
31
+ # Congruence Classes
32
+ DeclareCategory("IsInverseSemigroupCongruenceClassByKernelTrace",
33
+ IsCongruenceClass and IsAttributeStoringRep and
34
+ IsMultiplicativeElement);
35
+
36
+ # Special congruences
37
+ DeclareAttribute("MinimumGroupCongruence",
38
+ IsInverseSemigroup and IsGeneratorsOfInverseSemigroup);