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

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

Potentially problematic release.


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

Files changed (354) hide show
  1. gap/pkg/semigroups/CHANGELOG.md +1699 -0
  2. gap/pkg/semigroups/CONTRIBUTING.md +91 -0
  3. gap/pkg/semigroups/GNUmakefile +110 -0
  4. gap/pkg/semigroups/GNUmakefile.in +110 -0
  5. gap/pkg/semigroups/GPL +674 -0
  6. gap/pkg/semigroups/LICENSE +16 -0
  7. gap/pkg/semigroups/Makefile +26 -0
  8. gap/pkg/semigroups/Makefile.gappkg +225 -0
  9. gap/pkg/semigroups/PackageInfo.g +529 -0
  10. gap/pkg/semigroups/README.md +102 -0
  11. gap/pkg/semigroups/VERSIONS +112 -0
  12. gap/pkg/semigroups/aclocal.m4 +375 -0
  13. gap/pkg/semigroups/autogen.sh +25 -0
  14. gap/pkg/semigroups/bin/x86_64-apple-darwin22-default64-kv10/semigroups.so +0 -0
  15. gap/pkg/semigroups/config.guess +1807 -0
  16. gap/pkg/semigroups/config.log +1082 -0
  17. gap/pkg/semigroups/config.status +1134 -0
  18. gap/pkg/semigroups/config.sub +1960 -0
  19. gap/pkg/semigroups/configure +9742 -0
  20. gap/pkg/semigroups/configure.ac +71 -0
  21. gap/pkg/semigroups/data/doc/greens.pickle +1 -0
  22. gap/pkg/semigroups/data/gens/fullbool-8.pickle.gz +0 -0
  23. gap/pkg/semigroups/data/gens/fullbool.pickle.gz +0 -0
  24. gap/pkg/semigroups/data/gens/hall.pickle.gz +0 -0
  25. gap/pkg/semigroups/data/gens/reflex-6.pickle.gz +0 -0
  26. gap/pkg/semigroups/data/gens/reflex.pickle.gz +0 -0
  27. gap/pkg/semigroups/data/tst/bipart4 +10 -0
  28. gap/pkg/semigroups/data/tst/pperm10 +1 -0
  29. gap/pkg/semigroups/data/tst/tables.gz +0 -0
  30. gap/pkg/semigroups/data/tst/testdata +1 -0
  31. gap/pkg/semigroups/data/tst/testinstall.pickle +1 -0
  32. gap/pkg/semigroups/data/tst/trans3 +7 -0
  33. gap/pkg/semigroups/data/tst/trans3-old +7 -0
  34. gap/pkg/semigroups/environment.yml +7 -0
  35. gap/pkg/semigroups/gap/attributes/acting.gd +15 -0
  36. gap/pkg/semigroups/gap/attributes/acting.gi +297 -0
  37. gap/pkg/semigroups/gap/attributes/attr.gd +91 -0
  38. gap/pkg/semigroups/gap/attributes/attr.gi +1214 -0
  39. gap/pkg/semigroups/gap/attributes/dual.gd +25 -0
  40. gap/pkg/semigroups/gap/attributes/dual.gi +209 -0
  41. gap/pkg/semigroups/gap/attributes/factor.gd +17 -0
  42. gap/pkg/semigroups/gap/attributes/factor.gi +453 -0
  43. gap/pkg/semigroups/gap/attributes/homomorph.gd +84 -0
  44. gap/pkg/semigroups/gap/attributes/homomorph.gi +591 -0
  45. gap/pkg/semigroups/gap/attributes/inverse.gd +38 -0
  46. gap/pkg/semigroups/gap/attributes/inverse.gi +708 -0
  47. gap/pkg/semigroups/gap/attributes/isomorph.gd +16 -0
  48. gap/pkg/semigroups/gap/attributes/isomorph.gi +377 -0
  49. gap/pkg/semigroups/gap/attributes/isorms.gd +49 -0
  50. gap/pkg/semigroups/gap/attributes/isorms.gi +1383 -0
  51. gap/pkg/semigroups/gap/attributes/maximal.gd +16 -0
  52. gap/pkg/semigroups/gap/attributes/maximal.gi +1876 -0
  53. gap/pkg/semigroups/gap/attributes/properties.gd +109 -0
  54. gap/pkg/semigroups/gap/attributes/properties.gi +1658 -0
  55. gap/pkg/semigroups/gap/attributes/rms-translat.gd +39 -0
  56. gap/pkg/semigroups/gap/attributes/rms-translat.gi +1078 -0
  57. gap/pkg/semigroups/gap/attributes/semifp.gd +12 -0
  58. gap/pkg/semigroups/gap/attributes/semifp.gi +84 -0
  59. gap/pkg/semigroups/gap/attributes/translat.gd +474 -0
  60. gap/pkg/semigroups/gap/attributes/translat.gi +1779 -0
  61. gap/pkg/semigroups/gap/congruences/cong.gd +154 -0
  62. gap/pkg/semigroups/gap/congruences/cong.gi +351 -0
  63. gap/pkg/semigroups/gap/congruences/conginv.gd +38 -0
  64. gap/pkg/semigroups/gap/congruences/conginv.gi +589 -0
  65. gap/pkg/semigroups/gap/congruences/conglatt.gd +101 -0
  66. gap/pkg/semigroups/gap/congruences/conglatt.gi +886 -0
  67. gap/pkg/semigroups/gap/congruences/congpairs.gd +21 -0
  68. gap/pkg/semigroups/gap/congruences/congpairs.gi +272 -0
  69. gap/pkg/semigroups/gap/congruences/congpart.gd +90 -0
  70. gap/pkg/semigroups/gap/congruences/congpart.gi +449 -0
  71. gap/pkg/semigroups/gap/congruences/congrees.gd +20 -0
  72. gap/pkg/semigroups/gap/congruences/congrees.gi +313 -0
  73. gap/pkg/semigroups/gap/congruences/congrms.gd +54 -0
  74. gap/pkg/semigroups/gap/congruences/congrms.gi +1467 -0
  75. gap/pkg/semigroups/gap/congruences/congsemigraph.gd +28 -0
  76. gap/pkg/semigroups/gap/congruences/congsemigraph.gi +289 -0
  77. gap/pkg/semigroups/gap/congruences/congsimple.gd +27 -0
  78. gap/pkg/semigroups/gap/congruences/congsimple.gi +236 -0
  79. gap/pkg/semigroups/gap/congruences/conguniv.gd +20 -0
  80. gap/pkg/semigroups/gap/congruences/conguniv.gi +271 -0
  81. gap/pkg/semigroups/gap/congruences/congwordgraph.gd +21 -0
  82. gap/pkg/semigroups/gap/congruences/congwordgraph.gi +250 -0
  83. gap/pkg/semigroups/gap/elements/bipart.gd +71 -0
  84. gap/pkg/semigroups/gap/elements/bipart.gi +995 -0
  85. gap/pkg/semigroups/gap/elements/blocks.gd +31 -0
  86. gap/pkg/semigroups/gap/elements/blocks.gi +134 -0
  87. gap/pkg/semigroups/gap/elements/boolmat.gd +74 -0
  88. gap/pkg/semigroups/gap/elements/boolmat.gi +726 -0
  89. gap/pkg/semigroups/gap/elements/elements.gd +11 -0
  90. gap/pkg/semigroups/gap/elements/elements.gi +121 -0
  91. gap/pkg/semigroups/gap/elements/ffmat.gd +71 -0
  92. gap/pkg/semigroups/gap/elements/ffmat.gi +311 -0
  93. gap/pkg/semigroups/gap/elements/maxplusmat.gd +131 -0
  94. gap/pkg/semigroups/gap/elements/maxplusmat.gi +782 -0
  95. gap/pkg/semigroups/gap/elements/pbr.gd +51 -0
  96. gap/pkg/semigroups/gap/elements/pbr.gi +740 -0
  97. gap/pkg/semigroups/gap/elements/pperm.gd +11 -0
  98. gap/pkg/semigroups/gap/elements/pperm.gi +14 -0
  99. gap/pkg/semigroups/gap/elements/semiringmat.gd +136 -0
  100. gap/pkg/semigroups/gap/elements/semiringmat.gi +717 -0
  101. gap/pkg/semigroups/gap/elements/star.gd +21 -0
  102. gap/pkg/semigroups/gap/elements/star.gi +21 -0
  103. gap/pkg/semigroups/gap/elements/trans.gd +13 -0
  104. gap/pkg/semigroups/gap/elements/trans.gi +50 -0
  105. gap/pkg/semigroups/gap/fp/freeband.gd +22 -0
  106. gap/pkg/semigroups/gap/fp/freeband.gi +502 -0
  107. gap/pkg/semigroups/gap/fp/freeinverse.gd +30 -0
  108. gap/pkg/semigroups/gap/fp/freeinverse.gi +465 -0
  109. gap/pkg/semigroups/gap/fp/tietze.gd +89 -0
  110. gap/pkg/semigroups/gap/fp/tietze.gi +1578 -0
  111. gap/pkg/semigroups/gap/fp/word.gd +15 -0
  112. gap/pkg/semigroups/gap/fp/word.gi +67 -0
  113. gap/pkg/semigroups/gap/greens/acting-inverse.gi +774 -0
  114. gap/pkg/semigroups/gap/greens/acting-regular.gi +553 -0
  115. gap/pkg/semigroups/gap/greens/acting.gd +81 -0
  116. gap/pkg/semigroups/gap/greens/acting.gi +2433 -0
  117. gap/pkg/semigroups/gap/greens/froidure-pin.gd +25 -0
  118. gap/pkg/semigroups/gap/greens/froidure-pin.gi +741 -0
  119. gap/pkg/semigroups/gap/greens/generic.gd +117 -0
  120. gap/pkg/semigroups/gap/greens/generic.gi +630 -0
  121. gap/pkg/semigroups/gap/ideals/acting.gd +17 -0
  122. gap/pkg/semigroups/gap/ideals/acting.gi +1155 -0
  123. gap/pkg/semigroups/gap/ideals/froidure-pin.gd +11 -0
  124. gap/pkg/semigroups/gap/ideals/froidure-pin.gi +105 -0
  125. gap/pkg/semigroups/gap/ideals/ideals.gd +45 -0
  126. gap/pkg/semigroups/gap/ideals/ideals.gi +442 -0
  127. gap/pkg/semigroups/gap/ideals/lambda-rho.gd +16 -0
  128. gap/pkg/semigroups/gap/ideals/lambda-rho.gi +614 -0
  129. gap/pkg/semigroups/gap/libsemigroups/cong.gd +24 -0
  130. gap/pkg/semigroups/gap/libsemigroups/cong.gi +431 -0
  131. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gd +16 -0
  132. gap/pkg/semigroups/gap/libsemigroups/fpsemi.gi +53 -0
  133. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gd +17 -0
  134. gap/pkg/semigroups/gap/libsemigroups/froidure-pin.gi +945 -0
  135. gap/pkg/semigroups/gap/libsemigroups/sims1.gd +38 -0
  136. gap/pkg/semigroups/gap/libsemigroups/sims1.gi +308 -0
  137. gap/pkg/semigroups/gap/main/acting.gd +36 -0
  138. gap/pkg/semigroups/gap/main/acting.gi +779 -0
  139. gap/pkg/semigroups/gap/main/froidure-pin.gd +72 -0
  140. gap/pkg/semigroups/gap/main/froidure-pin.gi +655 -0
  141. gap/pkg/semigroups/gap/main/graded.gd +26 -0
  142. gap/pkg/semigroups/gap/main/graded.gi +355 -0
  143. gap/pkg/semigroups/gap/main/lambda-rho.gd +29 -0
  144. gap/pkg/semigroups/gap/main/lambda-rho.gi +514 -0
  145. gap/pkg/semigroups/gap/main/orbits.gd +24 -0
  146. gap/pkg/semigroups/gap/main/orbits.gi +512 -0
  147. gap/pkg/semigroups/gap/main/semiact.gd +20 -0
  148. gap/pkg/semigroups/gap/main/semiact.gi +821 -0
  149. gap/pkg/semigroups/gap/main/setup.gd +61 -0
  150. gap/pkg/semigroups/gap/main/setup.gi +1094 -0
  151. gap/pkg/semigroups/gap/obsolete.gd +9 -0
  152. gap/pkg/semigroups/gap/obsolete.gi +14 -0
  153. gap/pkg/semigroups/gap/options.g +55 -0
  154. gap/pkg/semigroups/gap/semigroups/grpperm.gd +12 -0
  155. gap/pkg/semigroups/gap/semigroups/grpperm.gi +177 -0
  156. gap/pkg/semigroups/gap/semigroups/semibipart.gd +28 -0
  157. gap/pkg/semigroups/gap/semigroups/semibipart.gi +570 -0
  158. gap/pkg/semigroups/gap/semigroups/semiboolmat.gd +20 -0
  159. gap/pkg/semigroups/gap/semigroups/semiboolmat.gi +104 -0
  160. gap/pkg/semigroups/gap/semigroups/semicons.gd +52 -0
  161. gap/pkg/semigroups/gap/semigroups/semicons.gi +1194 -0
  162. gap/pkg/semigroups/gap/semigroups/semidp.gd +13 -0
  163. gap/pkg/semigroups/gap/semigroups/semidp.gi +509 -0
  164. gap/pkg/semigroups/gap/semigroups/semieunit.gd +126 -0
  165. gap/pkg/semigroups/gap/semigroups/semieunit.gi +889 -0
  166. gap/pkg/semigroups/gap/semigroups/semiex.gd +104 -0
  167. gap/pkg/semigroups/gap/semigroups/semiex.gi +1590 -0
  168. gap/pkg/semigroups/gap/semigroups/semiffmat.gd +37 -0
  169. gap/pkg/semigroups/gap/semigroups/semiffmat.gi +565 -0
  170. gap/pkg/semigroups/gap/semigroups/semifp.gd +28 -0
  171. gap/pkg/semigroups/gap/semigroups/semifp.gi +1364 -0
  172. gap/pkg/semigroups/gap/semigroups/semigraph.gd +40 -0
  173. gap/pkg/semigroups/gap/semigroups/semigraph.gi +292 -0
  174. gap/pkg/semigroups/gap/semigroups/semigrp.gd +165 -0
  175. gap/pkg/semigroups/gap/semigroups/semigrp.gi +1225 -0
  176. gap/pkg/semigroups/gap/semigroups/semimaxplus.gd +72 -0
  177. gap/pkg/semigroups/gap/semigroups/semimaxplus.gi +710 -0
  178. gap/pkg/semigroups/gap/semigroups/semintmat.gd +13 -0
  179. gap/pkg/semigroups/gap/semigroups/semintmat.gi +74 -0
  180. gap/pkg/semigroups/gap/semigroups/semipbr.gd +19 -0
  181. gap/pkg/semigroups/gap/semigroups/semipbr.gi +139 -0
  182. gap/pkg/semigroups/gap/semigroups/semipperm.gd +27 -0
  183. gap/pkg/semigroups/gap/semigroups/semipperm.gi +711 -0
  184. gap/pkg/semigroups/gap/semigroups/semiquo.gd +14 -0
  185. gap/pkg/semigroups/gap/semigroups/semiquo.gi +97 -0
  186. gap/pkg/semigroups/gap/semigroups/semiringmat.gd +16 -0
  187. gap/pkg/semigroups/gap/semigroups/semiringmat.gi +21 -0
  188. gap/pkg/semigroups/gap/semigroups/semirms.gd +19 -0
  189. gap/pkg/semigroups/gap/semigroups/semirms.gi +977 -0
  190. gap/pkg/semigroups/gap/semigroups/semitrans.gd +49 -0
  191. gap/pkg/semigroups/gap/semigroups/semitrans.gi +909 -0
  192. gap/pkg/semigroups/gap/tools/display.gd +24 -0
  193. gap/pkg/semigroups/gap/tools/display.gi +749 -0
  194. gap/pkg/semigroups/gap/tools/io.gd +17 -0
  195. gap/pkg/semigroups/gap/tools/io.gi +543 -0
  196. gap/pkg/semigroups/gap/tools/iterators.gd +16 -0
  197. gap/pkg/semigroups/gap/tools/iterators.gi +253 -0
  198. gap/pkg/semigroups/gap/tools/utils.gd +19 -0
  199. gap/pkg/semigroups/gap/tools/utils.gi +756 -0
  200. gap/pkg/semigroups/gapbind14/.ccls +18 -0
  201. gap/pkg/semigroups/gapbind14/.clang-format +104 -0
  202. gap/pkg/semigroups/gapbind14/CPPLINT.cfg +5 -0
  203. gap/pkg/semigroups/gapbind14/LICENSE +674 -0
  204. gap/pkg/semigroups/gapbind14/README.md +76 -0
  205. gap/pkg/semigroups/gapbind14/demo/.gitignore +4 -0
  206. gap/pkg/semigroups/gapbind14/demo/LICENSE +293 -0
  207. gap/pkg/semigroups/gapbind14/demo/Makefile.gappkg +220 -0
  208. gap/pkg/semigroups/gapbind14/demo/Makefile.in +19 -0
  209. gap/pkg/semigroups/gapbind14/demo/PackageInfo.g +87 -0
  210. gap/pkg/semigroups/gapbind14/demo/README.md +17 -0
  211. gap/pkg/semigroups/gapbind14/demo/configure +34 -0
  212. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gd +19 -0
  213. gap/pkg/semigroups/gapbind14/demo/gap/gapbind_demo.gi +10 -0
  214. gap/pkg/semigroups/gapbind14/demo/init.g +16 -0
  215. gap/pkg/semigroups/gapbind14/demo/makedoc.g +10 -0
  216. gap/pkg/semigroups/gapbind14/demo/read.g +6 -0
  217. gap/pkg/semigroups/gapbind14/demo/src/gapbind_demo.cc +142 -0
  218. gap/pkg/semigroups/gapbind14/demo/tst/testall.g +12 -0
  219. gap/pkg/semigroups/gapbind14/include/gapbind14/cpp_fn.hpp +223 -0
  220. gap/pkg/semigroups/gapbind14/include/gapbind14/gap_include.hpp +26 -0
  221. gap/pkg/semigroups/gapbind14/include/gapbind14/gapbind14.hpp +445 -0
  222. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_free_fn.hpp +420 -0
  223. gap/pkg/semigroups/gapbind14/include/gapbind14/tame_mem_fn.hpp +556 -0
  224. gap/pkg/semigroups/gapbind14/include/gapbind14/to_cpp.hpp +162 -0
  225. gap/pkg/semigroups/gapbind14/include/gapbind14/to_gap.hpp +158 -0
  226. gap/pkg/semigroups/gapbind14/src/.clang-format +108 -0
  227. gap/pkg/semigroups/gapbind14/src/gapbind14.cpp +334 -0
  228. gap/pkg/semigroups/init.g +150 -0
  229. gap/pkg/semigroups/m4/ax_append_flag.m4 +50 -0
  230. gap/pkg/semigroups/m4/ax_check_compile_flag.m4 +53 -0
  231. gap/pkg/semigroups/m4/ax_check_hpcombi.m4 +121 -0
  232. gap/pkg/semigroups/m4/ax_check_libsemigroup.m4 +68 -0
  233. gap/pkg/semigroups/m4/ax_compare_version.m4 +177 -0
  234. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  235. gap/pkg/semigroups/m4/ax_cxx_compile_stdcxx_14.m4 +34 -0
  236. gap/pkg/semigroups/m4/ax_prefix_config_h.m4 +203 -0
  237. gap/pkg/semigroups/m4/ax_pthread.m4 +522 -0
  238. gap/pkg/semigroups/m4/find_gap.m4 +94 -0
  239. gap/pkg/semigroups/makedoc.g +153 -0
  240. gap/pkg/semigroups/prerequisites.sh +62 -0
  241. gap/pkg/semigroups/read.g +105 -0
  242. gap/pkg/semigroups/release.toml +6 -0
  243. gap/pkg/semigroups/tst/extreme/README +2 -0
  244. gap/pkg/semigroups/tst/extreme/attrinv.tst +703 -0
  245. gap/pkg/semigroups/tst/extreme/bipart.tst +2803 -0
  246. gap/pkg/semigroups/tst/extreme/closure.tst +652 -0
  247. gap/pkg/semigroups/tst/extreme/cong.tst +286 -0
  248. gap/pkg/semigroups/tst/extreme/conginv.tst +43 -0
  249. gap/pkg/semigroups/tst/extreme/examples.tst +2449 -0
  250. gap/pkg/semigroups/tst/extreme/freeband.tst +37 -0
  251. gap/pkg/semigroups/tst/extreme/greens-acting-regular.tst +27 -0
  252. gap/pkg/semigroups/tst/extreme/greens-acting.tst +1999 -0
  253. gap/pkg/semigroups/tst/extreme/ideals.tst +858 -0
  254. gap/pkg/semigroups/tst/extreme/inverse.tst +1025 -0
  255. gap/pkg/semigroups/tst/extreme/maximal.tst +856 -0
  256. gap/pkg/semigroups/tst/extreme/misc.tst +4236 -0
  257. gap/pkg/semigroups/tst/extreme/monoid_pkg.tst +1488 -0
  258. gap/pkg/semigroups/tst/extreme/properties.tst +914 -0
  259. gap/pkg/semigroups/tst/extreme/semibipart.tst +2837 -0
  260. gap/pkg/semigroups/tst/extreme/semieunit.tst +49 -0
  261. gap/pkg/semigroups/tst/extreme/semiffmat.tst +353 -0
  262. gap/pkg/semigroups/tst/extreme/semigroups.tst +245 -0
  263. gap/pkg/semigroups/tst/extreme/semiiter.tst +58 -0
  264. gap/pkg/semigroups/tst/extreme/semirms.tst +1091 -0
  265. gap/pkg/semigroups/tst/extreme/transform.tst +305 -0
  266. gap/pkg/semigroups/tst/extreme/translat.tst +44 -0
  267. gap/pkg/semigroups/tst/standard/README +2 -0
  268. gap/pkg/semigroups/tst/standard/attributes/acting.tst +388 -0
  269. gap/pkg/semigroups/tst/standard/attributes/attr.tst +2404 -0
  270. gap/pkg/semigroups/tst/standard/attributes/dual.tst +308 -0
  271. gap/pkg/semigroups/tst/standard/attributes/factor.tst +629 -0
  272. gap/pkg/semigroups/tst/standard/attributes/homomorph.tst +1134 -0
  273. gap/pkg/semigroups/tst/standard/attributes/inverse.tst +1521 -0
  274. gap/pkg/semigroups/tst/standard/attributes/isomorph.tst +435 -0
  275. gap/pkg/semigroups/tst/standard/attributes/isorms.tst +1147 -0
  276. gap/pkg/semigroups/tst/standard/attributes/maximal.tst +853 -0
  277. gap/pkg/semigroups/tst/standard/attributes/properties.tst +2028 -0
  278. gap/pkg/semigroups/tst/standard/attributes/semifp.tst +53 -0
  279. gap/pkg/semigroups/tst/standard/attributes/translat.tst +796 -0
  280. gap/pkg/semigroups/tst/standard/congruences/cong.tst +1044 -0
  281. gap/pkg/semigroups/tst/standard/congruences/conginv.tst +292 -0
  282. gap/pkg/semigroups/tst/standard/congruences/conglatt.tst +421 -0
  283. gap/pkg/semigroups/tst/standard/congruences/congpairs.tst +1011 -0
  284. gap/pkg/semigroups/tst/standard/congruences/congrees.tst +288 -0
  285. gap/pkg/semigroups/tst/standard/congruences/congrms.tst +701 -0
  286. gap/pkg/semigroups/tst/standard/congruences/congsemigraph.tst +422 -0
  287. gap/pkg/semigroups/tst/standard/congruences/congsimple.tst +311 -0
  288. gap/pkg/semigroups/tst/standard/congruences/conguniv.tst +259 -0
  289. gap/pkg/semigroups/tst/standard/congruences/congwordgraph.tst +330 -0
  290. gap/pkg/semigroups/tst/standard/elements/bipart.tst +783 -0
  291. gap/pkg/semigroups/tst/standard/elements/blocks.tst +166 -0
  292. gap/pkg/semigroups/tst/standard/elements/boolmat.tst +608 -0
  293. gap/pkg/semigroups/tst/standard/elements/elements.tst +117 -0
  294. gap/pkg/semigroups/tst/standard/elements/ffmat.tst +349 -0
  295. gap/pkg/semigroups/tst/standard/elements/maxplusmat.tst +613 -0
  296. gap/pkg/semigroups/tst/standard/elements/pbr.tst +506 -0
  297. gap/pkg/semigroups/tst/standard/elements/pperm.tst +32 -0
  298. gap/pkg/semigroups/tst/standard/elements/semiringmat.tst +601 -0
  299. gap/pkg/semigroups/tst/standard/elements/trans.tst +58 -0
  300. gap/pkg/semigroups/tst/standard/fp/freeband.tst +311 -0
  301. gap/pkg/semigroups/tst/standard/fp/freeinverse.tst +147 -0
  302. gap/pkg/semigroups/tst/standard/fp/tietze.tst +780 -0
  303. gap/pkg/semigroups/tst/standard/fp/word.tst +106 -0
  304. gap/pkg/semigroups/tst/standard/greens/acting-inverse.tst +545 -0
  305. gap/pkg/semigroups/tst/standard/greens/acting-regular.tst +396 -0
  306. gap/pkg/semigroups/tst/standard/greens/acting.tst +2033 -0
  307. gap/pkg/semigroups/tst/standard/greens/froidure-pin.tst +1831 -0
  308. gap/pkg/semigroups/tst/standard/greens/generic.tst +1436 -0
  309. gap/pkg/semigroups/tst/standard/ideals/acting.tst +279 -0
  310. gap/pkg/semigroups/tst/standard/ideals/froidure-pin.tst +178 -0
  311. gap/pkg/semigroups/tst/standard/ideals/ideals.tst +380 -0
  312. gap/pkg/semigroups/tst/standard/libsemigroups/cong.tst +310 -0
  313. gap/pkg/semigroups/tst/standard/libsemigroups/froidure-pin.tst +778 -0
  314. gap/pkg/semigroups/tst/standard/libsemigroups/sims1.tst +379 -0
  315. gap/pkg/semigroups/tst/standard/main/acting.tst +411 -0
  316. gap/pkg/semigroups/tst/standard/main/froidure-pin.tst +392 -0
  317. gap/pkg/semigroups/tst/standard/main/semiact.tst +203 -0
  318. gap/pkg/semigroups/tst/standard/main/setup.tst +1144 -0
  319. gap/pkg/semigroups/tst/standard/obsolete.tst +19 -0
  320. gap/pkg/semigroups/tst/standard/options.tst +54 -0
  321. gap/pkg/semigroups/tst/standard/semigroups/grpperm.tst +581 -0
  322. gap/pkg/semigroups/tst/standard/semigroups/semibipart.tst +2635 -0
  323. gap/pkg/semigroups/tst/standard/semigroups/semiboolmat.tst +1871 -0
  324. gap/pkg/semigroups/tst/standard/semigroups/semicons.tst +1173 -0
  325. gap/pkg/semigroups/tst/standard/semigroups/semidp.tst +739 -0
  326. gap/pkg/semigroups/tst/standard/semigroups/semieunit.tst +339 -0
  327. gap/pkg/semigroups/tst/standard/semigroups/semiex.tst +2055 -0
  328. gap/pkg/semigroups/tst/standard/semigroups/semiffmat.tst +746 -0
  329. gap/pkg/semigroups/tst/standard/semigroups/semifp.tst +2702 -0
  330. gap/pkg/semigroups/tst/standard/semigroups/semigraph.tst +133 -0
  331. gap/pkg/semigroups/tst/standard/semigroups/semigrp.tst +1112 -0
  332. gap/pkg/semigroups/tst/standard/semigroups/semimaxplus.tst +654 -0
  333. gap/pkg/semigroups/tst/standard/semigroups/semipbr.tst +2142 -0
  334. gap/pkg/semigroups/tst/standard/semigroups/semipperm.tst +2169 -0
  335. gap/pkg/semigroups/tst/standard/semigroups/semiquo.tst +278 -0
  336. gap/pkg/semigroups/tst/standard/semigroups/semirms.tst +3010 -0
  337. gap/pkg/semigroups/tst/standard/semigroups/semitrans.tst +2758 -0
  338. gap/pkg/semigroups/tst/standard/tools/display.tst +1040 -0
  339. gap/pkg/semigroups/tst/standard/tools/io.tst +363 -0
  340. gap/pkg/semigroups/tst/testinstall.tst +1815 -0
  341. gap/pkg/semigroups/tst/teststandard.g +22 -0
  342. gap/pkg/semigroups/tst/workspaces/load-workspace.tst +142 -0
  343. gap/pkg/semigroups/tst/workspaces/load.g +11 -0
  344. gap/pkg/semigroups/tst/workspaces/save-workspace.tst +166 -0
  345. gap/pkg/semigroups/tst/workspaces/save.g +14 -0
  346. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA +93 -0
  347. passagemath_gap_pkg_semigroups-10.6.29.dist-info/METADATA.bak +94 -0
  348. passagemath_gap_pkg_semigroups-10.6.29.dist-info/RECORD +354 -0
  349. passagemath_gap_pkg_semigroups-10.6.29.dist-info/WHEEL +6 -0
  350. passagemath_gap_pkg_semigroups-10.6.29.dist-info/top_level.txt +1 -0
  351. passagemath_gap_pkg_semigroups.dylibs/libsemigroups.2.dylib +0 -0
  352. sage/all__sagemath_gap_pkg_semigroups.py +1 -0
  353. sage/libs/all__sagemath_gap_pkg_semigroups.py +1 -0
  354. sage/libs/gap_pkg_semigroups.abi3.so +0 -0
@@ -0,0 +1,465 @@
1
+ ###############################################################################
2
+ ##
3
+ ## fp/freeinverse.gi
4
+ ## Copyright (C) 2013-2022 Julius Jonusas
5
+ ##
6
+ ## Licensing information can be found in the README file of this package.
7
+ ##
8
+ ###############################################################################
9
+ ##
10
+ ## Internal representation of the elements of free inverse semigroups is
11
+ ## is given as a list:
12
+ ## [
13
+ ## number of generators,
14
+ ## number of vertices,
15
+ ## finish vertex,
16
+ ## parent list (for each vertex gives the name of a parent),
17
+ ## list of labels (from a parent to a child),
18
+ ## adjacency list for every vertex
19
+ ## ]
20
+ ##
21
+ ## For example an element xxx^-1yy^-1 is represented by:
22
+ ## [2, 4, 2, [fail, 1, 2, 2], [fail, 1, 1, 4], [2, , , ,], [3, 1 , ,4],
23
+ ## [ , 2, , ], [, , 2, ]];
24
+ ##
25
+ ## Note that if x1, x2, ... are the generators, then in the internal
26
+ ## representation of x1 is 1, x1^-1 by 2, x2 by 3 and so on.
27
+ ##
28
+
29
+ InstallTrueMethod(IsGeneratorsOfInverseSemigroup,
30
+ IsFreeInverseSemigroupElementCollection);
31
+
32
+ InstallImmediateMethod(IsFinite, IsFreeInverseSemigroup, 0, ReturnFalse);
33
+
34
+ ############################################################################
35
+ ##
36
+ ## FreeInverseSemigroup( <rank>[, names] )
37
+ ## FreeInverseSemigroup( name1, name2, ... )
38
+ ## FreeInverseSemigroup( names )
39
+ ##
40
+
41
+ InstallGlobalFunction(FreeInverseSemigroup,
42
+ function(arg...)
43
+ local names, F, type, gens, opts, S, m;
44
+
45
+ # Get and check the argument list, and construct names if necessary.
46
+ if Length(arg) = 1 and IsInt(arg[1]) and 0 < arg[1] then
47
+ names := List([1 .. arg[1]],
48
+ i -> Concatenation("x", String(i)));
49
+ MakeImmutable(names);
50
+ elif Length(arg) = 2 and IsInt(arg[1]) and 0 < arg[1]
51
+ and IsString(arg[2]) then
52
+ names := List([1 .. arg[1]],
53
+ i -> Concatenation(arg[2], String(i)));
54
+ MakeImmutable(names);
55
+ elif Length(arg) = 1 and IsList(arg[1]) and IsEmpty(arg[1]) then
56
+ names := arg[1];
57
+ elif 1 <= Length(arg) and ForAll(arg, IsString) then
58
+ names := arg;
59
+ elif Length(arg) = 1 and IsList(arg[1])
60
+ and ForAll(arg[1], IsString) then
61
+ names := arg[1];
62
+ else
63
+ ErrorNoReturn("FreeInverseSemigroup(<name1>,<name2>..) or ",
64
+ "FreeInverseSemigroup(<rank> [, name]),");
65
+ fi;
66
+
67
+ if IsEmpty(names) then
68
+ ErrorNoReturn("the number of generators of a free inverse semigroup must ",
69
+ "be non-zero");
70
+ fi;
71
+
72
+ F := NewFamily("FreeInverseSemigroupElementsFamily",
73
+ IsFreeInverseSemigroupElement,
74
+ CanEasilySortElements);
75
+
76
+ type := NewType(F, IsFreeInverseSemigroupElement and IsPositionalObjectRep);
77
+
78
+ gens := EmptyPlist(Length(names));
79
+ for m in [1 .. Length(names)] do
80
+ gens[m] := Objectify(type, [Length(names), 2, 2, [fail, 1],
81
+ [fail, 2 * m - 1], [], []]);
82
+ gens[m]![6][2 * m - 1] := 2;
83
+ gens[m]![7][2 * m] := 1;
84
+ od;
85
+
86
+ names := Concatenation(List(names, x -> [x, Concatenation(x, "^-1")]));
87
+ StoreInfoFreeMagma(F, names, IsFreeInverseSemigroupElement);
88
+ opts := SEMIGROUPS.ProcessOptionsRec(SEMIGROUPS.DefaultOptionsRec,
89
+ rec(batch_size := 401));
90
+ # We require a smallish batch_size because otherwise the iterators are
91
+ # unreasonably slow.
92
+ S := Objectify(NewType(FamilyObj(gens),
93
+ IsFreeInverseSemigroupCategory
94
+ and IsInverseSemigroup
95
+ and IsAttributeStoringRep),
96
+ rec(opts := opts));
97
+ SetGeneratorsOfInverseSemigroup(S, gens);
98
+ SetIsFreeInverseSemigroup(S, true);
99
+ SetIsSimpleSemigroup(S, false);
100
+
101
+ FamilyObj(S)!.semigroup := S;
102
+ F!.semigroup := S;
103
+
104
+ SetIsWholeFamily(S, true);
105
+ SetIsTrivial(S, IsEmpty(names));
106
+
107
+ return S;
108
+ end);
109
+
110
+ ############################################################################
111
+ ##
112
+ ## ViewObj
113
+ ##
114
+
115
+ InstallMethod(ViewObj, "for a free inverse semigroup element",
116
+ [IsFreeInverseSemigroupElement], PrintObj);
117
+
118
+ InstallMethod(PrintObj, "for a free inverse semigroup element",
119
+ [IsFreeInverseSemigroupElement],
120
+ function(x)
121
+
122
+ if UserPreference("semigroups", "FreeInverseSemigroupElementDisplay")
123
+ = "minimal" then
124
+ Print(MinimalWord(x));
125
+ else
126
+ Print(CanonicalForm(x));
127
+ fi;
128
+
129
+ return;
130
+ end);
131
+
132
+ InstallMethod(ViewObj,
133
+ "for a free inverse semigroup containing the whole family",
134
+ [IsFreeInverseSemigroupCategory],
135
+ function(S)
136
+ if GAPInfo.ViewLength * 10 < Length(GeneratorsOfMagma(S)) then
137
+ Print("<free inverse semigroup with ",
138
+ Length(GeneratorsOfInverseSemigroup(S)),
139
+ " generators>");
140
+ else
141
+ Print("<free inverse semigroup on the generators ",
142
+ GeneratorsOfInverseSemigroup(S), ">");
143
+ fi;
144
+ end);
145
+
146
+ ############################################################################
147
+ ##
148
+ ## MinimalWord
149
+ ##
150
+
151
+ SEMIGROUPS.InvertGenerator := function(n)
152
+ if n mod 2 = 0 then
153
+ return n - 1;
154
+ fi;
155
+ return n + 1;
156
+ end;
157
+
158
+ InstallMethod(MinimalWord, "for a free inverse semigroup element",
159
+ [IsFreeInverseSemigroupElement],
160
+ function(x)
161
+ local InvertGenerator, is_a_child_of, gen, stop_start, i, j, path, words,
162
+ pos, part, temp_word, out, names;
163
+
164
+ InvertGenerator := SEMIGROUPS.InvertGenerator;
165
+
166
+ is_a_child_of := x![4];
167
+ gen := x![5];
168
+ stop_start := []; # stop_start[i]=j if vertex i is the jth vertex in the path
169
+ # from the stop to the start vertex.
170
+ i := x![3];
171
+ j := 1;
172
+ path := [];
173
+
174
+ while i <> fail do
175
+ stop_start[i] := j;
176
+ path[j] := i;
177
+ j := j + 1;
178
+ i := is_a_child_of[i]; # parent of i
179
+ od;
180
+
181
+ words := EmptyPlist(j - 1);
182
+ pos := []; # keeps track of the vertices already visited
183
+ part := []; # keeps track of the part of the tree, that vertex i is in
184
+
185
+ i := x![2]; # nr of vertices
186
+ while i > 0 do
187
+ temp_word := [];
188
+ j := i;
189
+ while not IsBound(pos[j]) and not IsBound(stop_start[j]) do
190
+ Add(temp_word, InvertGenerator(gen[j]));
191
+ j := is_a_child_of[j];
192
+ od;
193
+ temp_word := Concatenation(List(Reversed(temp_word), InvertGenerator),
194
+ temp_word);
195
+ if IsBound(stop_start[j]) and not IsBound(words[stop_start[j]]) then
196
+ # first time in this part of the tree
197
+ words[stop_start[j]] := temp_word;
198
+ part[j] := stop_start[j];
199
+ pos[j] := 0;
200
+ else # been in this part before
201
+ words[part[j]] := Concatenation(words[part[j]]{[1 .. pos[j]]},
202
+ temp_word,
203
+ words[part[j]]{[pos[j] + 1 ..
204
+ Length(words[part[j]])]});
205
+ fi;
206
+ i := i - 1;
207
+ od;
208
+
209
+ out := [];
210
+ path := Reversed(path);
211
+
212
+ names := FamilyObj(x)!.names;
213
+
214
+ for i in path do
215
+ Append(out, List(words[stop_start[i]], l -> Concatenation(names[l], "*")));
216
+ if i + 1 <= Length(path) then
217
+ Add(out, Concatenation(names[gen[path[i + 1]]], "*"));
218
+ fi;
219
+ od;
220
+
221
+ out := Concatenation(out);
222
+ if Last(out) = '*' then
223
+ Remove(out);
224
+ fi;
225
+
226
+ return out;
227
+ end);
228
+
229
+ ##############################################################################
230
+ ##
231
+ ## CanonicalForm( s )
232
+ ##
233
+ ##
234
+
235
+ InstallMethod(CanonicalForm, "for a free inverse semigroup element",
236
+ [IsFreeInverseSemigroupElement],
237
+ function(tree)
238
+ local InvertGenerator, children, fork, maxleftreducedpath,
239
+ maxleftreduced, groupelem, i, mlr, output, pivot;
240
+
241
+ InvertGenerator := SEMIGROUPS.InvertGenerator;
242
+
243
+ children := function(n)
244
+ local list, i;
245
+
246
+ list := [];
247
+ for i in [1 .. Length(tree![4])] do
248
+ if tree![4][i] = n then
249
+ Add(list, i);
250
+ fi;
251
+ od;
252
+ return list;
253
+ end;
254
+
255
+ fork := function(list1, list2)
256
+ local i, result;
257
+
258
+ result := [];
259
+ for i in list2 do
260
+ Add(result, Concatenation(list1, [i]));
261
+ od;
262
+ return result;
263
+ end;
264
+
265
+ maxleftreducedpath := fork([], children(1));
266
+ for pivot in maxleftreducedpath do
267
+ while children(Last(pivot)) <> [] do
268
+ maxleftreducedpath := fork(pivot, children(Last(pivot)));
269
+ Add(pivot, Last(children(Last(pivot))));
270
+ od;
271
+ od;
272
+
273
+ maxleftreduced := [];
274
+ for i in [1 .. Length(maxleftreducedpath)] do
275
+ maxleftreduced[i] := List(maxleftreducedpath[i], x -> tree![5][x]);
276
+ maxleftreduced[i] := Concatenation(maxleftreduced[i],
277
+ Reversed(List(maxleftreduced[i],
278
+ InvertGenerator)));
279
+ od;
280
+
281
+ groupelem := [];
282
+ i := tree![3];
283
+ while i <> 1 do
284
+ Add(groupelem, i);
285
+ i := tree![4][i];
286
+ od;
287
+ groupelem := Reversed(List(groupelem, x -> tree![5][x]));
288
+
289
+ mlr := maxleftreduced;
290
+ if Length(mlr) = 1 and Length(mlr[1]) = 2 and Length(groupelem) > 0 and
291
+ ((mlr[1][1] mod 2 = 1 and mlr[1][2] = mlr[1][1] + 1) or
292
+ (mlr[1][1] mod 2 = 0 and mlr[1][2] = mlr[1][1] - 1)) then
293
+ output := Concatenation(List(groupelem, x -> FamilyObj(tree)!.names[x]));
294
+ else
295
+ output :=
296
+ Concatenation(List(Concatenation(Concatenation(Set(mlr)), groupelem),
297
+ x -> FamilyObj(tree)!.names[x]));
298
+ fi;
299
+ return output;
300
+ end);
301
+
302
+ ##############################################################################
303
+ ##
304
+ ## Equality
305
+ ##
306
+
307
+ InstallMethod(\=, "for elements of a free inverse semigroup",
308
+ IsIdenticalObj,
309
+ [IsFreeInverseSemigroupElement, IsFreeInverseSemigroupElement],
310
+ function(tree1, tree2)
311
+ local isequal, i;
312
+
313
+ isequal := true;
314
+ for i in [1 .. 5 + tree1![2]] do
315
+ if tree1![i] <> tree2![i] then
316
+ isequal := false;
317
+ break;
318
+ fi;
319
+ od;
320
+
321
+ if not isequal then
322
+ isequal := CanonicalForm(tree1) = CanonicalForm(tree2);
323
+ fi;
324
+ return isequal;
325
+ end);
326
+
327
+ InstallMethod(\<, "for elements of a free inverse semigroup",
328
+ IsIdenticalObj,
329
+ [IsFreeInverseSemigroupElement, IsFreeInverseSemigroupElement],
330
+ {tree1, tree2} -> CanonicalForm(tree1) < CanonicalForm(tree2));
331
+
332
+ InstallMethod(ChooseHashFunction, "for a free inverse semigroup element",
333
+ [IsFreeInverseSemigroupElement, IsInt],
334
+ function(x, hashlen)
335
+ local sample, record, func;
336
+ sample := List(CanonicalForm(x), IntChar);
337
+ record := ChooseHashFunction(sample, hashlen);
338
+ func := {x, data} -> record.func(List(CanonicalForm(x), IntChar), data);
339
+ return rec(func := func, data := record.data);
340
+ end);
341
+
342
+ ##############################################################################
343
+ ##
344
+ ## Multiplication
345
+ ##
346
+
347
+ InstallMethod(\*, "for elements of a free inverse semigroup",
348
+ IsIdenticalObj,
349
+ [IsFreeInverseSemigroupElement, IsFreeInverseSemigroupElement],
350
+ function(tree1, tree2)
351
+ local new_names, product, i, parent, InvertGenerator;
352
+
353
+ InvertGenerator := SEMIGROUPS.InvertGenerator;
354
+
355
+ new_names := [];
356
+ new_names[1] := tree1![3];
357
+
358
+ # product := StructuralCopy(tree1);
359
+ product := [];
360
+ for i in [1 .. tree1![2] + 5] do
361
+ product[i] := ShallowCopy(tree1![i]);
362
+ od;
363
+
364
+ for i in [2 .. tree2![2]] do
365
+ parent := new_names[tree2![4][i]];
366
+ if parent <= tree1![2] and IsBound(tree1![parent + 5][tree2![5][i]]) then
367
+ new_names[i] := tree1![parent + 5][tree2![5][i]];
368
+ else
369
+ product[2] := product[2] + 1;
370
+ new_names[i] := product[2];
371
+ product[4][product[2]] := parent;
372
+ product[5][product[2]] := tree2![5][i];
373
+ product[product[2] + 5] := [];
374
+ product[product[2] + 5][InvertGenerator(tree2![5][i])] := parent;
375
+ product[parent + 5][tree2![5][i]] := product[2];
376
+ fi;
377
+
378
+ od;
379
+ product[3] := new_names[tree2![3]];
380
+ return Objectify(TypeObj(tree1), product);
381
+ end);
382
+
383
+ ##############################################################################
384
+ ##
385
+ ## Inverse
386
+ ##
387
+
388
+ InstallMethod(\^, "for elements of a free inverse semigroup",
389
+ [IsFreeInverseSemigroupElement, IsNegInt],
390
+ function(tree, n)
391
+ local product, old_names, new_names, label, current_old, result, i, j;
392
+
393
+ product := [];
394
+ product[1] := tree![1];
395
+ product[2] := tree![2];
396
+ old_names := [];
397
+ old_names[1] := tree![3];
398
+ new_names := [];
399
+ new_names[tree![3]] := 1;
400
+ product[4] := [];
401
+ product[5] := [];
402
+
403
+ label := 2;
404
+
405
+ for i in [1 .. tree![2]] do
406
+ product[5 + i] := [];
407
+ for j in [1 .. 2 * tree![1]] do
408
+ if IsBound(tree![old_names[i] + 5][j]) then
409
+ current_old := tree![old_names[i] + 5][j];
410
+ if not IsBound(new_names[current_old]) then
411
+ old_names[label] := current_old;
412
+ new_names[current_old] := label;
413
+ product[4][new_names[current_old]] := i;
414
+ product[5][new_names[current_old]] := j;
415
+ label := label + 1;
416
+ fi;
417
+ product[5 + i][j] := new_names[current_old];
418
+ fi;
419
+ od;
420
+ od;
421
+
422
+ product[3] := new_names[1];
423
+ product[4][1] := fail;
424
+ product[5][1] := fail;
425
+
426
+ result := Objectify(TypeObj(tree), product);
427
+ return result ^ (-n);
428
+ end);
429
+
430
+ ###########################################################################
431
+ ##
432
+ ## Size
433
+ ##
434
+
435
+ InstallMethod(Size, "for a free inverse semigroup",
436
+ [IsFreeInverseSemigroupCategory], S -> infinity);
437
+
438
+ InstallMethod(IsFreeInverseSemigroup, "for a semigroup",
439
+ [IsSemigroup],
440
+ function(s)
441
+ local gens, occurs, used, list, g, i;
442
+
443
+ if not IsInverseSemigroup(s) then
444
+ return false;
445
+ elif IsFreeInverseSemigroupElementCollection(s) then
446
+ gens := Generators(s);
447
+ occurs := BlistList([1 .. Length(FamilyObj(gens[1])!.names) / 2], []);
448
+ used := BlistList([1 .. Length(FamilyObj(gens[1])!.names) / 2], []);
449
+ for g in gens do
450
+ list := g![5];
451
+ for i in [2 .. Length(list)] do
452
+ used[Int((list[i] + 1) / 2)] := true;
453
+ od;
454
+ if g![2] = 2 then
455
+ occurs[Int((g![5][2] + 1) / 2)] := true;
456
+ fi;
457
+ od;
458
+
459
+ if occurs = used then
460
+ return true;
461
+ fi;
462
+ fi;
463
+
464
+ ErrorNoReturn("cannot determine the answer");
465
+ end);
@@ -0,0 +1,89 @@
1
+ ############################################################################
2
+ ##
3
+ ## fp/tietze.gd
4
+ ## Copyright (C) 2021-2022 Tom Conti-Leslie
5
+ ## Ben Spiers
6
+ ##
7
+ ## Licensing information can be found in the README file of this package.
8
+ ##
9
+ ############################################################################
10
+ ##
11
+
12
+ ################################################################################
13
+ # The Stz Object (name pending) Idea is to have a single object containing
14
+ # generators and relations that can have the relations be presented in a number
15
+ # of different computation-friendly or user-friendly formats
16
+ # (LetterRepAssocWord, ExtRepOfObj, user-readable strings). Ideally never seen
17
+ # by the user, but used internally to - among other things - reduce the
18
+ # relations of an FP semigroup/monoid to a simple form.
19
+ #
20
+ # I argue: no need for IsMutable/IsImmutable/etc, since StzPresentation likely
21
+ # is never seen by the user, so as long as it is contained to the stz reduction
22
+ # (as it likely will be) there will be no issues.
23
+ ################################################################################
24
+
25
+ DeclareOperation("StzPresentation", [IsFpSemigroup]);
26
+ DeclareCategory("IsStzPresentation", IsList);
27
+
28
+ # Current relations in the process of being reduced
29
+ DeclareAttribute("RelationsOfStzPresentation", IsStzPresentation);
30
+ DeclareAttribute("GeneratorsOfStzPresentation", IsStzPresentation);
31
+
32
+ # Stores original semigroup before reductions
33
+ DeclareAttribute("UnreducedFpSemigroup", IsStzPresentation);
34
+
35
+ # Stores a map between the words of each semigroup (how?)
36
+ # Change as relations change
37
+ # Otherwise must keep track of all tietze transforms i suppose
38
+ DeclareAttribute("TietzeForwardMap", IsStzPresentation);
39
+ DeclareAttribute("TietzeBackwardMap", IsStzPresentation);
40
+
41
+ DeclareOperation("TietzeForwardMapReplaceSubword",
42
+ [IsStzPresentation, IsList, IsList]);
43
+
44
+ DeclareOperation("StzSimplifyOnce", [IsStzPresentation]);
45
+ DeclareOperation("StzSimplifyPresentation", [IsStzPresentation]);
46
+
47
+ DeclareOperation("SimplifiedFpSemigroup", [IsFpSemigroup]);
48
+ DeclareOperation("SimplifyFpSemigroup", [IsFpSemigroup]);
49
+
50
+ # FP semigroup attributes
51
+ DeclareAttribute("UnreducedFpSemigroup", IsFpSemigroup);
52
+ DeclareAttribute("FpTietzeIsomorphism", IsFpSemigroup);
53
+
54
+ DeclareOperation("StzIsomorphism", [IsStzPresentation]);
55
+
56
+ ## Tietze Transformations - various implementations
57
+ # Tietze 1 (add relation)
58
+ DeclareOperation("StzAddRelation", [IsStzPresentation, IsList]);
59
+ DeclareOperation("StzAddRelationNC", [IsStzPresentation, IsList]);
60
+ # Tietze 2 (remove relation)
61
+ DeclareOperation("StzRemoveRelation", [IsStzPresentation, IsPosInt]);
62
+ DeclareOperation("StzRemoveRelationNC", [IsStzPresentation, IsPosInt]);
63
+ # Tietze 3 (add generator)
64
+ DeclareOperation("StzAddGenerator", [IsStzPresentation, IsList]);
65
+ DeclareOperation("StzAddGenerator", [IsStzPresentation,
66
+ IsElementOfFpSemigroup]);
67
+ DeclareOperation("StzAddGenerator", [IsStzPresentation, IsList, IsString]);
68
+ DeclareOperation("StzAddGenerator", [IsStzPresentation,
69
+ IsElementOfFpSemigroup,
70
+ IsString]);
71
+ # Tietze 4 (remove generator)
72
+ DeclareOperation("StzRemoveGenerator", [IsStzPresentation, IsPosInt]);
73
+ DeclareOperation("StzRemoveGenerator", [IsStzPresentation, IsString]);
74
+ DeclareOperation("StzRemoveGenerator", [IsStzPresentation, IsPosInt, IsPosInt]);
75
+ DeclareOperation("StzRemoveGenerator", [IsStzPresentation, IsString, IsPosInt]);
76
+ # Tietze 1/2 (substitute relation)
77
+ DeclareOperation("StzSubstituteRelation",
78
+ [IsStzPresentation, IsPosInt, IsPosInt]);
79
+
80
+ DeclareOperation("StzPrintRelations", [IsStzPresentation]);
81
+ DeclareOperation("StzPrintRelations", [IsStzPresentation, IsList]);
82
+ DeclareOperation("StzPrintRelation", [IsStzPresentation, IsPosInt]);
83
+ DeclareOperation("StzPrintGenerators", [IsStzPresentation]);
84
+ DeclareOperation("StzPrintGenerators", [IsStzPresentation, IsList]);
85
+ DeclareOperation("StzPrintPresentation", [IsStzPresentation]);
86
+
87
+ # Information class for relation printing etc
88
+ DeclareInfoClass("InfoFpSemigroup");
89
+ SetInfoLevel(InfoFpSemigroup, 2);