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,780 @@
1
+ #############################################################################
2
+ ##
3
+ #W standard/fp/tietze.tst
4
+ #Y Copyright (C) 2021-2022 Tom Conti-Leslie
5
+ #Y Ben Spiers
6
+ ##
7
+ ## Licensing information can be found in the README file of this package.
8
+ ##
9
+ #############################################################################
10
+
11
+ #@local a, argument, b, bad, c, d, e, elm, f, f1, f2, g, infoRel, inv, l, len
12
+ #@local map, prevFpSemigroupInfoLevel, r, rels, s, s1, s2, s3, stz, stz1, stz2
13
+ #@local stz3, t, word
14
+ gap> START_TEST("Semigroups package: standard/fp/tietze.tst");
15
+ gap> LoadPackage("semigroups", false);;
16
+
17
+ # Whenever Stz Print methods are tested, the previous InfoLevel for
18
+ # InfoFpSemigroup is saved, set to whatever level is needed for the test, then
19
+ # set back. This is done in each chunk so that every chunk is independent.
20
+ gap> SEMIGROUPS.StartTest();
21
+
22
+ # Test StzPresentation, basic attributes, viewing methods
23
+ gap> f := FreeSemigroup(["a", "b", "c"]);;
24
+ gap> r := [[(f.1 ^ 2 * f.2) ^ 2, f.1 ^ 2 * f.2], [f.3, f.1 ^ 2 * f.2]];;
25
+ gap> s := f / r;;
26
+ gap> stz := StzPresentation(s);
27
+ <fp semigroup presentation with 3 generators and 2 relations with length 16>
28
+ gap> IsStzPresentation(stz);
29
+ true
30
+ gap> IsStzPresentation(s);
31
+ false
32
+ gap> GeneratorsOfStzPresentation(stz);
33
+ [ "a", "b", "c" ]
34
+ gap> RelationsOfStzPresentation(stz);
35
+ [ [ [ 1, 1, 2, 1, 1, 2 ], [ 1, 1, 2 ] ], [ [ 3 ], [ 1, 1, 2 ] ] ]
36
+ gap> s = UnreducedFpSemigroup(stz);
37
+ true
38
+ gap> Length(stz);
39
+ 16
40
+ gap> TietzeForwardMap(stz);
41
+ [ [ 1 ], [ 2 ], [ 3 ] ]
42
+ gap> TietzeBackwardMap(stz);
43
+ [ [ 1 ], [ 2 ], [ 3 ] ]
44
+
45
+ # Test StzPresentation viewing methods
46
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
47
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
48
+ gap> f := FreeSemigroup(["a", "b", "c"]);;
49
+ gap> r := [[(f.1 ^ 2 * f.2) ^ 2, f.1 ^ 2 * f.2], [f.3, f.1 ^ 2 * f.2]];;
50
+ gap> s := f / r;;
51
+ gap> stz := StzPresentation(s);;
52
+ gap> StzPrintGenerators(stz, [1, 3, 1, 4, 5, s]);
53
+ #I 1. a 8 occurrences
54
+ #I 3. c 1 occurrences
55
+ #I 1. a 8 occurrences
56
+ gap> StzPrintGenerators(stz);
57
+ #I 1. a 8 occurrences
58
+ #I 2. b 4 occurrences
59
+ #I 3. c 1 occurrences
60
+ gap> StzPrintRelation(stz, 2);
61
+ #I 2. c = a^2*b
62
+ gap> StzPrintRelations(stz, [2, 2, 1, 3, "t"]);
63
+ #I 2. c = a^2*b
64
+ #I 2. c = a^2*b
65
+ #I 1. (a^2*b)^2 = a^2*b
66
+ gap> StzPrintRelations(stz);
67
+ #I 1. (a^2*b)^2 = a^2*b
68
+ #I 2. c = a^2*b
69
+ gap> StzPrintPresentation(stz);
70
+ #I Current generators:
71
+ #I 1. a 8 occurrences
72
+ #I 2. b 4 occurrences
73
+ #I 3. c 1 occurrences
74
+ #I
75
+ #I Current relations:
76
+ #I 1. (a^2*b)^2 = a^2*b
77
+ #I 2. c = a^2*b
78
+ #I
79
+ #I There are 3 generators and 2 relations of total length 16.
80
+ #I
81
+ #I Generators of original fp semigroup expressed as
82
+ #I combinations of generators in current presentation:
83
+ #I 1. a = a
84
+ #I 2. b = b
85
+ #I 3. c = c
86
+ #I
87
+ #I Generators of current presentation expressed as
88
+ #I combinations of generators of original fp semigroup:
89
+ #I 1. a = a
90
+ #I 2. b = b
91
+ #I 3. c = c
92
+ gap> SEMIGROUPS.StzRelationDisplayString(stz, 4);
93
+ fail
94
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
95
+
96
+ # Multiple small Stz presentations, comparisons, display words in singular
97
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
98
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
99
+ gap> f1 := FreeSemigroup("fred");;
100
+ gap> f2 := FreeSemigroup("foo", "bar");;
101
+ gap> s1 := f1 / [[f1.1 * f1.1, f1.1]];;
102
+ gap> s2 := f2 / [[f2.1 * f2.2, f2.2 * f2.1]];;
103
+ gap> s3 := f2 / [];;
104
+ gap> stz1 := StzPresentation(s1);
105
+ <fp semigroup presentation with 1 generator and 1 relation with length 4>
106
+ gap> stz2 := StzPresentation(s2);
107
+ <fp semigroup presentation with 2 generators and 1 relation with length 6>
108
+ gap> stz3 := StzPresentation(s3);
109
+ <fp semigroup presentation with 2 generators and 0 relations with length 2>
110
+ gap> stz1 < stz2;
111
+ true
112
+ gap> stz1 > stz2;
113
+ false
114
+ gap> StzPrintRelation(stz2, 1);
115
+ #I 1. foo*bar = bar*foo
116
+ gap> StzPrintRelations(stz3);
117
+ #I There are no relations in the presentation <stz>
118
+ gap> SetGeneratorsOfStzPresentation(stz3, []);
119
+ gap> GeneratorsOfStzPresentation(stz3);
120
+ [ ]
121
+ gap> StzPrintGenerators(stz3);
122
+ #I There are no generators in the presentation <stz>
123
+ gap> StzPrintPresentation(stz1);
124
+ #I Current generators:
125
+ #I 1. fred 3 occurrences
126
+ #I
127
+ #I Current relations:
128
+ #I 1. fred^2 = fred
129
+ #I
130
+ #I There is 1 generator and 1 relation of total length 4.
131
+ #I
132
+ #I Generators of original fp semigroup expressed as
133
+ #I combinations of generators in current presentation:
134
+ #I 1. fred = fred
135
+ #I
136
+ #I Generators of current presentation expressed as
137
+ #I combinations of generators of original fp semigroup:
138
+ #I 1. fred = fred
139
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
140
+
141
+ # Test SetRelationsOfStzPresentation
142
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
143
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
144
+ gap> f := FreeSemigroup("s1", "s2", "s3");;
145
+ gap> s := f / [[f.1 * f.2, f.3], [f.2 * f.3, f.1], [f.3 * f.1, f.2]];;
146
+ gap> stz := StzPresentation(s);
147
+ <fp semigroup presentation with 3 generators and 3 relations with length 12>
148
+ gap> SetRelationsOfStzPresentation(stz, "yeet");
149
+ Error, parameter <arg> must be a list of pairs of words in LetterRep format
150
+ gap> SetRelationsOfStzPresentation(stz, [[1, "yeet"]]);
151
+ Error, parameter <arg> must be a list of pairs of words in LetterRep format
152
+ gap> SetRelationsOfStzPresentation(stz, [[1, 2, 3]]);
153
+ Error, parameter <arg> must be a list of pairs of words in LetterRep format
154
+ gap> SetRelationsOfStzPresentation(stz, [[[1], [2], [3]]]);
155
+ Error, parameter <arg> must be a list of pairs of words in LetterRep format
156
+ gap> SetRelationsOfStzPresentation(stz, [[["yeet"], [2]]]);
157
+ Error, parameter <arg> must be a list of pairs of words in LetterRep format
158
+ gap> SetRelationsOfStzPresentation(stz,
159
+ > [[[1, 2], [3, 3, 2]], [[1, 3], [3, 1]]]);
160
+ gap> StzPrintRelations(stz);
161
+ #I 1. s1*s2 = s3^2*s2
162
+ #I 2. s1*s3 = s3*s1
163
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
164
+
165
+ # Test SetTietzeForwardMap
166
+ gap> f := FreeSemigroup("s1", "s2", "s3");;
167
+ gap> s := f / [[f.1 * f.2, f.3], [f.2 * f.3, f.1], [f.3 * f.1, f.2]];;
168
+ gap> stz := StzPresentation(s);
169
+ <fp semigroup presentation with 3 generators and 3 relations with length 12>
170
+ gap> TietzeForwardMap(stz);
171
+ [ [ 1 ], [ 2 ], [ 3 ] ]
172
+ gap> SetTietzeForwardMap(stz, [1, 2, 3]);
173
+ Error, the 2nd argument <newMaps> must be a list of lists of positive integers
174
+ gap> SetTietzeForwardMap(stz, [["yeet", 1]]);
175
+ Error, the 2nd argument <newMaps> must be a list of lists of positive integers
176
+ gap> SetTietzeForwardMap(stz, [[1], [2], [1, 1]]);
177
+ gap> TietzeForwardMap(stz);
178
+ [ [ 1 ], [ 2 ], [ 1, 1 ] ]
179
+
180
+ # Test SetTietzeBackwardMap
181
+ gap> f := FreeSemigroup("s1", "s2", "s3");;
182
+ gap> s := f / [[f.1 * f.2, f.3], [f.2 * f.3, f.1], [f.3 * f.1, f.2]];;
183
+ gap> stz := StzPresentation(s);
184
+ <fp semigroup presentation with 3 generators and 3 relations with length 12>
185
+ gap> TietzeBackwardMap(stz);
186
+ [ [ 1 ], [ 2 ], [ 3 ] ]
187
+ gap> SetTietzeBackwardMap(stz, [1, 2, 3]);
188
+ Error, the 2nd argument <newMaps> must be a list of lists of positive integers
189
+ gap> SetTietzeBackwardMap(stz, [["yeet", 1]]);
190
+ Error, the 2nd argument <newMaps> must be a list of lists of positive integers
191
+ gap> SetTietzeBackwardMap(stz, [[1], [2], [3], [1, 2, 3]]);
192
+ gap> TietzeBackwardMap(stz);
193
+ [ [ 1 ], [ 2 ], [ 3 ], [ 1, 2, 3 ] ]
194
+
195
+ # Test TietzeForwardMapReplaceSubword
196
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
197
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
198
+ gap> f := FreeSemigroup("f", "g", "h", "i");;
199
+ gap> s := f / [[(f.1 * f.2) ^ 2 * f.1 * f.3 * f.1 * f.2 * f.1, f.4]];;
200
+ gap> stz := StzPresentation(s);
201
+ <fp semigroup presentation with 4 generators and 1 relation with length 14>
202
+ gap> TietzeForwardMap(stz);
203
+ [ [ 1 ], [ 2 ], [ 3 ], [ 4 ] ]
204
+ gap> StzRemoveGenerator(stz, "i");
205
+ gap> TietzeForwardMap(stz);
206
+ [ [ 1 ], [ 2 ], [ 3 ], [ 1, 2, 1, 2, 1, 3, 1, 2, 1 ] ]
207
+ gap> TietzeForwardMapReplaceSubword(stz, [1, 2, 1], [3, 3]);
208
+ gap> TietzeForwardMap(stz);
209
+ [ [ 1 ], [ 2 ], [ 3 ], [ 3, 3, 2, 1, 3, 3, 3 ] ]
210
+ gap> StzPrintPresentation(stz);
211
+ #I Current generators:
212
+ #I 1. f 0 occurrences
213
+ #I 2. g 0 occurrences
214
+ #I 3. h 0 occurrences
215
+ #I
216
+ #I Current relations:
217
+ #I There are no relations in the presentation <stz>
218
+ #I
219
+ #I There are 3 generators and 0 relations of total length 3.
220
+ #I
221
+ #I Generators of original fp semigroup expressed as
222
+ #I combinations of generators in current presentation:
223
+ #I 1. f = f
224
+ #I 2. g = g
225
+ #I 3. h = h
226
+ #I 4. i = h^2*g*f*h^3
227
+ #I
228
+ #I Generators of current presentation expressed as
229
+ #I combinations of generators of original fp semigroup:
230
+ #I 1. f = f
231
+ #I 2. g = g
232
+ #I 3. h = h
233
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
234
+
235
+ # Test StzAddRelation and StzAddRelationNC
236
+ # (and SEMIGROUPS.TietzeTransformation1)
237
+ # Undecidable example (justifies NC although it can still verify some rels)
238
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
239
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
240
+ gap> f := FreeSemigroup("a", "b", "c", "d", "e");;
241
+ gap> g := GeneratorsOfSemigroup(f);;
242
+ gap> bad := "ac=ca, bc=cb, ce=eca, ad=da, bd=db, de=edb, cca=ccae";;
243
+ gap> rels := ParseRelations(g, bad);;
244
+ gap> s := f / rels;;
245
+ gap> a := s.1;;b := s.2;;c := s.3;;d := s.4;;e := s.5;;
246
+ gap> stz := StzPresentation(s);
247
+ <fp semigroup presentation with 5 generators and 7 relations with length 38>
248
+ gap> StzAddRelation(stz, [[3, 5], [5, 1, 3]]);
249
+ gap> StzAddRelation(stz, [d * a * b, a * b * d]);
250
+ gap> StzAddRelationNC(stz, [[1, 5, 2, 1, 4], [1, 4, 5, 1]]);
251
+ gap> StzAddRelationNC(stz, [a * c * c * d * b, c * c * d * a * e]);
252
+ gap> StzPrintRelations(stz);
253
+ #I 1. a*c = c*a
254
+ #I 2. b*c = c*b
255
+ #I 3. c*e = e*c*a
256
+ #I 4. a*d = d*a
257
+ #I 5. b*d = d*b
258
+ #I 6. d*e = e*d*b
259
+ #I 7. c^2*a = c^2*a*e
260
+ #I 8. c*e = e*a*c
261
+ #I 9. d*a*b = a*b*d
262
+ #I 10. a*e*b*a*d = a*d*e*a
263
+ #I 11. a*c^2*d*b = c^2*d*a*e
264
+ gap> StzAddRelation(stz, [[1], [2], [3]]);
265
+ Error, StzAddRelation: second argument <pair> should be a list
266
+ of length 2
267
+ gap> StzAddRelation(stz, [[], [2]]);
268
+ Error, StzAddRelation: words in second argument <pair> should
269
+ be non-empty
270
+ gap> StzAddRelation(stz, [[1, 2, 3], [6]]);
271
+ Error, StzAddRelation: words in second argument <pair>
272
+ should be lists of pos ints no greater than the
273
+ number of generators of first argument <stz>
274
+ gap> StzAddRelation(stz, [a * b, b * c, c * d]);
275
+ Error, StzAddRelation: second argument <pair> should be a list
276
+ of length 2
277
+ gap> StzAddRelationNC(stz, [[1], [2], [3]]);
278
+ Error, StzAddRelationNC: second argument <pair> should be a list
279
+ of length 2
280
+ gap> StzAddRelationNC(stz, [[], [2]]);
281
+ Error, StzAddRelationNC: words in second argument <pair>
282
+ should be non-empty
283
+ gap> StzAddRelationNC(stz, [[1, 2, 3], [6]]);
284
+ Error, StzAddRelationNC: words in second argument <pair>
285
+ should be lists of pos ints no greater than the
286
+ number of generators of first argument <stz>
287
+ gap> StzAddRelationNC(stz, [a * b, b * c, c * d]);
288
+ Error, StzAddRelationNC: second argument <pair> should be a list
289
+ of length 2
290
+ gap> StzAddRelation(stz, [42, 42]);
291
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
292
+ Error, no 3rd choice method found for `StzAddRelation' on 2 arguments
293
+ gap> StzAddRelationNC(stz, [42, 42]);
294
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
295
+ Error, no 3rd choice method found for `StzAddRelationNC' on 2 arguments
296
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
297
+
298
+ # Test StzAddRelation (with decidable problem, so that it rejects a
299
+ # non-redundant rel)
300
+ gap> f := FreeSemigroup("a", "b");;
301
+ gap> s := f / [[f.1 * f.2, f.2 * f.1]];;
302
+ gap> stz := StzPresentation(s);
303
+ <fp semigroup presentation with 2 generators and 1 relation with length 6>
304
+ gap> StzAddRelation(stz, [[1, 1], [1]]);
305
+ Error, StzAddRelation: second argument <pair> must list two
306
+ words that are equal in the presentation <stz>
307
+ gap> StzAddRelation(stz, [s.1 * s.1, s.1]);
308
+ Error, StzAddRelation: second argument <pair> must list two
309
+ words that are equal in the presentation <stz>
310
+
311
+ # Test StzRemoveRelation and StzRemoveRelationNC
312
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
313
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
314
+ gap> f := FreeSemigroup("x", "y");;
315
+ gap> r := ParseRelations([f.1, f.2],
316
+ > "xx=x, yy=y, xyxy=xy, yxyx=yx, xyxyx=xyx");;
317
+ gap> s := f / r;;
318
+ gap> stz := StzPresentation(s);
319
+ <fp semigroup presentation with 2 generators and 5 relations with length 28>
320
+ gap> StzRemoveRelation(stz, 5);
321
+ gap> StzRemoveRelation(stz, 4);
322
+ Error, StzRemoveRelation: second argument <index> must point to
323
+ a relation that is redundant in the presentation <stz>
324
+ gap> StzRemoveRelationNC(stz, 4);
325
+ gap> StzRemoveRelation(stz, 4);
326
+ Error, StzRemoveRelation: second argument <index> must be less
327
+ than or equal to the number of relations of the first
328
+ argument <stz>
329
+ gap> StzRemoveRelationNC(stz, 4);
330
+ Error, StzRemoveRelationNC: second argument <index> must be less
331
+ than or equal to the number of relations of the first
332
+ argument <stz>
333
+ gap> StzPrintPresentation(stz);
334
+ #I Current generators:
335
+ #I 1. x 6 occurrences
336
+ #I 2. y 6 occurrences
337
+ #I
338
+ #I Current relations:
339
+ #I 1. x^2 = x
340
+ #I 2. y^2 = y
341
+ #I 3. (x*y)^2 = x*y
342
+ #I
343
+ #I There are 2 generators and 3 relations of total length 14.
344
+ #I
345
+ #I Generators of original fp semigroup expressed as
346
+ #I combinations of generators in current presentation:
347
+ #I 1. x = x
348
+ #I 2. y = y
349
+ #I
350
+ #I Generators of current presentation expressed as
351
+ #I combinations of generators of original fp semigroup:
352
+ #I 1. x = x
353
+ #I 2. y = y
354
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
355
+
356
+ # Test StzAddGenerator (on 2 arguments, auto generator name creation)
357
+ gap> f := FreeSemigroup("a", "b");;
358
+ gap> s := f / [[(f.1 * f.1 * f.2) ^ 2, f.1 * f.1 * f.2]];;
359
+ gap> stz := StzPresentation(s);
360
+ <fp semigroup presentation with 2 generators and 1 relation with length 11>
361
+ gap> StzAddGenerator(stz, ["what?", "how?"]);
362
+ Error, StzAddGenerator: second argument <word> is not a
363
+ list of pos ints at most equal to the number of
364
+ generators of the first argument <stz>
365
+ gap> StzAddGenerator(stz, [1, 3, 1]);
366
+ Error, StzAddGenerator: second argument <word> is not a
367
+ list of pos ints at most equal to the number of
368
+ generators of the first argument <stz>
369
+ gap> StzAddGenerator(stz, []);
370
+ Error, StzAddGenerator: cannot add generator equal to the empty
371
+ word
372
+ gap> StzAddGenerator(stz, [1, 1, 2]);
373
+ gap> TietzeBackwardMap(stz);
374
+ [ [ 1 ], [ 2 ], [ 1, 1, 2 ] ]
375
+ gap> elm := (f / []).1;; # fp smgp elm but not in s
376
+ gap> StzAddGenerator(stz, elm);
377
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
378
+ Error, no 2nd choice method found for `StzAddGenerator' on 2 arguments
379
+ gap> StzAddGenerator(stz, s.1 * s.2);
380
+ gap> TietzeBackwardMap(stz);
381
+ [ [ 1 ], [ 2 ], [ 1, 1, 2 ], [ 1, 2 ] ]
382
+ gap> GeneratorsOfStzPresentation(stz);
383
+ [ "a", "b", "c", "d" ]
384
+
385
+ # Test StzAddGenerator (on 3 arguments: specified new generator name)
386
+ gap> f := FreeSemigroup("a", "b");;
387
+ gap> s := f / [[(f.1 * f.1 * f.2) ^ 2, f.1 * f.1 * f.2]];;
388
+ gap> stz := StzPresentation(s);
389
+ <fp semigroup presentation with 2 generators and 1 relation with length 11>
390
+ gap> StzAddGenerator(stz, ["what?", "how?"], "hehe");
391
+ Error, StzAddGenerator: second argument <word> is not a
392
+ list of pos ints at most equal to the number of
393
+ generators of the first argument <stz>
394
+ gap> StzAddGenerator(stz, [1, 3, 1], "dd");
395
+ Error, StzAddGenerator: second argument <word> is not a
396
+ list of pos ints at most equal to the number of
397
+ generators of the first argument <stz>
398
+ gap> StzAddGenerator(stz, [], "x");
399
+ Error, StzAddGenerator: cannot add generator equal to the empty
400
+ word
401
+ gap> StzAddGenerator(stz, [1, 1, 2], "a");
402
+ Error, StzAddGenerator: third argument <name> should not be the
403
+ name of a pre-existing generator
404
+ gap> StzAddGenerator(stz, [1, 1, 2], "newgenname");
405
+ gap> TietzeBackwardMap(stz);
406
+ [ [ 1 ], [ 2 ], [ 1, 1, 2 ] ]
407
+ gap> elm := (f / []).1;; # fp smgp elm but not in s
408
+ gap> StzAddGenerator(stz, elm, "somethingweird");
409
+ Error, no method found! For debugging hints type ?Recovery from NoMethodFound
410
+ Error, no 2nd choice method found for `StzAddGenerator' on 3 arguments
411
+ gap> StzAddGenerator(stz, s.1 * s.2, "ff");
412
+ gap> TietzeBackwardMap(stz);
413
+ [ [ 1 ], [ 2 ], [ 1, 1, 2 ], [ 1, 2 ] ]
414
+ gap> GeneratorsOfStzPresentation(stz);
415
+ [ "a", "b", "newgenname", "ff" ]
416
+
417
+ # Test StzRemoveGenerator on 2 arguments (index of relation unspecified)
418
+ gap> f := FreeSemigroup("x", "y", "z");;
419
+ gap> r := ParseRelations([f.1, f.2, f.3], "yx=xz, x=zy, y=z^3");;
420
+ gap> s := f / r;;
421
+ gap> stz := StzPresentation(s);
422
+ <fp semigroup presentation with 3 generators and 3 relations with length 14>
423
+ gap> StzRemoveGenerator(stz, 4);
424
+ Error, StzRemoveGenerator: second argument <gen> must be no
425
+ greater than the total number of generators
426
+ gap> StzRemoveGenerator(stz, "a");
427
+ Error, StzRemoveGenerator: second argument <gen> does not
428
+ correspond to a generator name in first argument <stz>
429
+ gap> StzRemoveGenerator(stz, 1);
430
+ gap> GeneratorsOfStzPresentation(stz);
431
+ [ "y", "z" ]
432
+ gap> RelationsOfStzPresentation(stz);
433
+ [ [ [ 1, 2, 1 ], [ 2, 1, 2 ] ], [ [ 1 ], [ 2, 2, 2 ] ] ]
434
+ gap> TietzeForwardMap(stz);
435
+ [ [ 2, 1 ], [ 1 ], [ 2 ] ]
436
+ gap> TietzeBackwardMap(stz);
437
+ [ [ 2 ], [ 3 ] ]
438
+ gap> StzRemoveGenerator(stz, 2);
439
+ Error, StzRemoveGenerator: there is no relation in first
440
+ argument <stz> expressing second argument <gen> as a
441
+ product of other generators
442
+ gap> StzRemoveGenerator(stz, "y");
443
+ gap> GeneratorsOfStzPresentation(stz);
444
+ [ "z" ]
445
+ gap> RelationsOfStzPresentation(stz);
446
+ [ [ [ 1, 1, 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 1 ] ] ]
447
+ gap> TietzeForwardMap(stz);
448
+ [ [ 1, 1, 1, 1 ], [ 1, 1, 1 ], [ 1 ] ]
449
+ gap> TietzeBackwardMap(stz);
450
+ [ [ 3 ] ]
451
+ gap> StzRemoveGenerator(stz, 2);
452
+ Error, StzRemoveGenerator: cannot remove only remaining
453
+ generator "z"
454
+ gap> StzRemoveGenerator(stz, "y");
455
+ Error, StzRemoveGenerator: second argument <gen> does not
456
+ correspond to a generator name in first argument <stz>
457
+ gap> StzRemoveGenerator(stz, 1);
458
+ Error, StzRemoveGenerator: cannot remove only remaining
459
+ generator "z"
460
+
461
+ # Test StzRemoveGenerator on 3 arguments (specified relation)
462
+ gap> f := FreeSemigroup(3);;
463
+ gap> s := f / [[f.1, f.2 ^ 2], [f.1, f.3 ^ 2], [f.2, f.3 ^ 2]];;
464
+ gap> stz := StzPresentation(s);
465
+ <fp semigroup presentation with 3 generators and 3 relations with length 12>
466
+ gap> StzRemoveGenerator(stz, 4, 1);
467
+ Error, StzRemoveGenerator: second argument <gen> must be no
468
+ greater than the total number of generators
469
+ gap> StzRemoveGenerator(stz, 1, 4);
470
+ Error, StzRemoveGenerator: third argument <index> must be no
471
+ greater than the total number of relations in first
472
+ argument <stz>
473
+ gap> StzRemoveGenerator(stz, 1, 3);
474
+ Error, StzRemoveGenerator: third argument <index> does not point
475
+ to a relation expressing second argument <gen> as a
476
+ combination of other generators in first argument <stz>
477
+ gap> SEMIGROUPS.TietzeTransformation4(stz, 1, 3);
478
+ Error, TietzeTransformation4, internal function: third argument
479
+ <index> does not point to a relation expressing second
480
+ argument <gen> as a combination of other generators
481
+ gap> StzRemoveGenerator(stz, "a", 1);
482
+ Error, StzRemoveGenerator: second argument <gen> does not
483
+ correspond to a generator name in first argument <stz>
484
+ gap> StzRemoveGenerator(stz, 1, 2);
485
+ gap> GeneratorsOfStzPresentation(stz);
486
+ [ "s2", "s3" ]
487
+ gap> RelationsOfStzPresentation(stz);
488
+ [ [ [ 2, 2 ], [ 1, 1 ] ], [ [ 1 ], [ 2, 2 ] ] ]
489
+ gap> TietzeForwardMap(stz);
490
+ [ [ 2, 2 ], [ 1 ], [ 2 ] ]
491
+ gap> TietzeBackwardMap(stz);
492
+ [ [ 2 ], [ 3 ] ]
493
+ gap> StzRemoveGenerator(stz, "s2", 2);
494
+ gap> GeneratorsOfStzPresentation(stz);
495
+ [ "s3" ]
496
+ gap> RelationsOfStzPresentation(stz);
497
+ [ [ [ 1, 1 ], [ 1, 1, 1, 1 ] ] ]
498
+ gap> TietzeForwardMap(stz);
499
+ [ [ 1, 1 ], [ 1, 1 ], [ 1 ] ]
500
+ gap> TietzeBackwardMap(stz);
501
+ [ [ 3 ] ]
502
+ gap> StzRemoveGenerator(stz, 1, 1);
503
+ Error, StzRemoveGenerator: cannot remove only remaining
504
+ generator "s3"
505
+
506
+ # Test all four Tietze transformations on trivial example
507
+ gap> f := FreeSemigroup("x");;
508
+ gap> s := f / [];;
509
+ gap> stz := StzPresentation(s);
510
+ <fp semigroup presentation with 1 generator and 0 relations with length 1>
511
+ gap> StzAddRelation(stz, [[1, 1], [1]]);
512
+ Error, StzAddRelation: second argument <pair> must list two
513
+ words that are equal in the presentation <stz>
514
+ gap> StzAddRelation(stz, [[1, 1], [1, 1]]);
515
+ gap> RelationsOfStzPresentation(stz);
516
+ [ [ [ 1, 1 ], [ 1, 1 ] ] ]
517
+ gap> StzAddGenerator(stz, s.1 ^ 2, "y");
518
+ gap> RelationsOfStzPresentation(stz);
519
+ [ [ [ 1, 1 ], [ 1, 1 ] ], [ [ 1, 1 ], [ 2 ] ] ]
520
+ gap> GeneratorsOfStzPresentation(stz);
521
+ [ "x", "y" ]
522
+ gap> StzRemoveRelation(stz, 1);
523
+ gap> RelationsOfStzPresentation(stz);
524
+ [ [ [ 1, 1 ], [ 2 ] ] ]
525
+ gap> StzRemoveGenerator(stz, "y");
526
+ gap> RelationsOfStzPresentation(stz);
527
+ [ ]
528
+
529
+ # Test StzSubstituteRelation
530
+ gap> f := FreeSemigroup("x", "y", "z");;
531
+ gap> r := ParseRelations([f.1, f.2, f.3], "xyxyx=zxyxz, xyx=x^2");;
532
+ gap> s := f / r;;
533
+ gap> stz := StzPresentation(s);
534
+ <fp semigroup presentation with 3 generators and 2 relations with length 18>
535
+ gap> RelationsOfStzPresentation(stz);
536
+ [ [ [ 1, 2, 1, 2, 1 ], [ 3, 1, 2, 1, 3 ] ], [ [ 1, 2, 1 ], [ 1, 1 ] ] ]
537
+ gap> StzSubstituteRelation(stz, 3, 1);
538
+ Error, StzSubstituteRelation: second argument <index> must be no
539
+ greater than the number of relations in first argument
540
+ <stz>
541
+ gap> StzSubstituteRelation(stz, 2, 3);
542
+ Error, StzSubstituteRelation: third argument <side> must be
543
+ either 1 or 2
544
+ gap> StzSubstituteRelation(stz, 2, 1);
545
+ gap> SortedList(RelationsOfStzPresentation(stz));
546
+ [ [ [ 1, 1, 2, 1 ], [ 3, 1, 1, 3 ] ], [ [ 1, 2, 1 ], [ 1, 1 ] ] ]
547
+
548
+ # Test (internal) function SEMIGROUPS.NewGeneratorName
549
+ gap> SEMIGROUPS.NewGeneratorName([]);
550
+ "a"
551
+ gap> SEMIGROUPS.NewGeneratorName(["a"]);
552
+ "b"
553
+ gap> SEMIGROUPS.NewGeneratorName(["g"]);
554
+ "a"
555
+ gap> SEMIGROUPS.NewGeneratorName(["A"]);
556
+ "B"
557
+ gap> SEMIGROUPS.NewGeneratorName(["R"]);
558
+ "A"
559
+ gap> SEMIGROUPS.NewGeneratorName(["yeet"]);
560
+ "a"
561
+ gap> SEMIGROUPS.NewGeneratorName(["?"]);
562
+ "a"
563
+ gap> SEMIGROUPS.NewGeneratorName(["a", "c", "d", "A", "B", "m4", "m1"]);
564
+ "b"
565
+ gap> SEMIGROUPS.NewGeneratorName(["A", "B", "C", "m1"]);
566
+ "D"
567
+ gap> SEMIGROUPS.NewGeneratorName(["a", "c", "d", "A", "B", "D", "X"]);
568
+ "C"
569
+ gap> SEMIGROUPS.NewGeneratorName(["s1", "s3", "m4", "m6", "m2"]);
570
+ "m7"
571
+ gap> SEMIGROUPS.NewGeneratorName(["gar", "bage"]);
572
+ "s1"
573
+
574
+ # Test StzSimplifyPresentation
575
+ # We do not require any specific steps to be carried, so suppress output
576
+ # (setting InfoLevel low enough) and only require that the final reduction
577
+ # is below a certain bar, and cannot be reduced further.
578
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
579
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
580
+ gap> f := FreeSemigroup("a", "b", "c", "d");;
581
+ gap> r := ParseRelations([f.1, f.2, f.3, f.4],
582
+ > "a^5=a,a^25=cb,(cb)^3=c,a=a^5,cb=cb,(cb)^12=b^12,d=a^10");;
583
+ gap> s := f / r;;
584
+ gap> stz := StzPresentation(s);
585
+ <fp semigroup presentation with 4 generators and 7 relations with length 101>
586
+ gap> StzSimplifyPresentation(stz);
587
+ gap> l := Length(stz);;
588
+ gap> l < 30; # first version of the algorithm was able to achieve this
589
+ true
590
+ gap> StzSimplifyOnce(stz);
591
+ false
592
+ gap> l = Length(stz);
593
+ true
594
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
595
+
596
+ # Test StzSimplifyPresentation, 2
597
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
598
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
599
+ gap> f := FreeSemigroup("f", "g");;
600
+ gap> s := f / [[f.1 * f.2, f.2 * f.1], [f.1, f.2]];;
601
+ gap> stz := StzPresentation(s);
602
+ <fp semigroup presentation with 2 generators and 2 relations with length 8>
603
+ gap> StzSimplifyPresentation(stz);
604
+ gap> GeneratorsOfStzPresentation(stz);
605
+ [ "g" ]
606
+ gap> RelationsOfStzPresentation(stz);
607
+ [ ]
608
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
609
+
610
+ # Test SEMIGROUPS.StzFrequentSubwordApply
611
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
612
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
613
+ gap> f := FreeSemigroup("a", "b", "c");;
614
+ gap> r := ParseRelations([f.1, f.2, f.3], "abbabb=cabb, ababb=c");;
615
+ gap> s := f / r;;
616
+ gap> stz := StzPresentation(s);
617
+ <fp semigroup presentation with 3 generators and 2 relations with length 19>
618
+ gap> SEMIGROUPS.StzFrequentSubwordApply(stz, rec(word := [1, 2, 2]));
619
+ gap> SortedList(RelationsOfStzPresentation(stz));
620
+ [ [ [ 1, 2, 2 ], [ 4 ] ], [ [ 1, 2, 4 ], [ 3 ] ], [ [ 4, 4 ], [ 3, 4 ] ] ]
621
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
622
+
623
+ # Test SEMIGROUPS.StzTrivialRelationApply
624
+ # and SEMIGROUPS.StzDuplicateRelsApply
625
+ # and SEMIGROUPS.StzGensRedundantApply
626
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
627
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
628
+ gap> f := FreeSemigroup("x", "y", "z");;
629
+ gap> r := ParseRelations([f.1, f.2, f.3], "xy=yx, yx=xy, x=x, y=xz");;
630
+ gap> s := f / r;;
631
+ gap> stz := StzPresentation(s);
632
+ <fp semigroup presentation with 3 generators and 4 relations with length 16>
633
+ gap> SEMIGROUPS.StzTrivialRelationApply(stz, rec(argument := 3));
634
+ gap> SortedList(RelationsOfStzPresentation(stz));
635
+ [ [ [ 1, 2 ], [ 2, 1 ] ], [ [ 2 ], [ 1, 3 ] ], [ [ 2, 1 ], [ 1, 2 ] ] ]
636
+ gap> SEMIGROUPS.StzDuplicateRelsApply(stz, rec(argument := 2));
637
+ gap> SortedList(RelationsOfStzPresentation(stz));
638
+ [ [ [ 1, 2 ], [ 2, 1 ] ], [ [ 2 ], [ 1, 3 ] ] ]
639
+ gap> SEMIGROUPS.StzGensRedundantApply(stz, rec(argument := 2, infoRel := 2));
640
+ gap> SortedList(RelationsOfStzPresentation(stz));
641
+ [ [ [ 1, 1, 2 ], [ 1, 2, 1 ] ] ]
642
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
643
+
644
+ # Test SEMIGROUPS.StzRelsSubApply
645
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
646
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
647
+ gap> f := FreeSemigroup("a", "b", "c", "d", "e");;
648
+ gap> r := ParseRelations(GeneratorsOfSemigroup(f),
649
+ > "abc=ca, acb=d, e=ca, ed=abc, ee=e");;
650
+ gap> s := f / r;;
651
+ gap> stz := StzPresentation(s);
652
+ <fp semigroup presentation with 5 generators and 5 relations with length 25>
653
+ gap> SEMIGROUPS.StzRelsSubApply(stz, rec(argument := 4));
654
+ gap> SortedList(RelationsOfStzPresentation(stz)) =
655
+ > [[[1, 3, 2], [4]],
656
+ > [[5], [3, 1]],
657
+ > [[5, 4], [1, 2, 3]],
658
+ > [[5, 4], [3, 1]],
659
+ > [[5, 5], [5]]];
660
+ true
661
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
662
+
663
+ # Test StzSimplifyOnce on 1 argument
664
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
665
+ gap> SetInfoLevel(InfoFpSemigroup, 0);;
666
+ gap> f := FreeSemigroup("a", "b", "c");
667
+ <free semigroup on the generators [ a, b, c ]>
668
+ gap> s := f / [[f.1 ^ 4, f.1], [f.1, f.1 ^ 44], [f.1 ^ 8, f.2 * f.3]];
669
+ <fp semigroup with 3 generators and 3 relations of length 63>
670
+ gap> stz := StzPresentation(s);
671
+ <fp semigroup presentation with 3 generators and 3 relations with length 63>
672
+ gap> len := Length(stz);
673
+ 63
674
+ gap> StzSimplifyOnce(stz);
675
+ true
676
+ gap> Length(stz) < len;
677
+ true
678
+ gap> s := f / [[f.1, f.1 ^ 2]];
679
+ <fp semigroup with 3 generators and 1 relation of length 6>
680
+ gap> stz := StzPresentation(s);
681
+ <fp semigroup presentation with 3 generators and 1 relation with length 6>
682
+ gap> len := Length(stz);
683
+ 6
684
+ gap> StzSimplifyOnce(stz);
685
+ false
686
+ gap> len = Length(stz);
687
+ true
688
+ gap> s := f / [[f.1, f.2 ^ 5]];
689
+ <fp semigroup with 3 generators and 1 relation of length 9>
690
+ gap> stz := StzPresentation(s);
691
+ <fp semigroup presentation with 3 generators and 1 relation with length 9>
692
+ gap> len := Length(stz);
693
+ 9
694
+ gap> StzSimplifyOnce(stz);
695
+ true
696
+ gap> Length(stz) < len;
697
+ true
698
+ gap> len := Length(stz);
699
+ 2
700
+ gap> StzSimplifyOnce(stz);
701
+ false
702
+ gap> len = Length(stz);
703
+ true
704
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
705
+
706
+ # Test StzIsomorphism
707
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
708
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
709
+ gap> f := FreeSemigroup("a", "b", "c");;
710
+ gap> r := ParseRelations([f.1, f.2, f.3], "ab=c, ababa=aba, c^2=bc");;
711
+ gap> s := f / r;;
712
+ gap> stz := StzPresentation(s);
713
+ <fp semigroup presentation with 3 generators and 3 relations with length 18>
714
+ gap> StzPrintGenerators(stz);
715
+ #I 1. a 6 occurrences
716
+ #I 2. b 5 occurrences
717
+ #I 3. c 4 occurrences
718
+ gap> StzPrintRelations(stz);
719
+ #I 1. a*b = c
720
+ #I 2. (a*b)^2*a = a*b*a
721
+ #I 3. c^2 = b*c
722
+ gap> StzRemoveGenerator(stz, "c");
723
+ gap> StzPrintRelations(stz);
724
+ #I 1. (a*b)^2*a = a*b*a
725
+ #I 2. (a*b)^2 = b*a*b
726
+ gap> StzAddGenerator(stz, s.3 * s.1, "d");
727
+ gap> StzPrintRelations(stz);
728
+ #I 1. (a*b)^2*a = a*b*a
729
+ #I 2. (a*b)^2 = b*a*b
730
+ #I 3. a*b*a = d
731
+ gap> StzSubstituteRelation(stz, 3, 1);
732
+ gap> StzPrintRelations(stz);
733
+ #I 1. d*b*a = d
734
+ #I 2. d*b = b*a*b
735
+ #I 3. a*b*a = d
736
+ gap> map := StzIsomorphism(stz);;
737
+ gap> s = Source(map);
738
+ true
739
+ gap> t := Range(map);;
740
+ gap> s.1 ^ map = t.1;
741
+ true
742
+ gap> s.2 ^ map = t.2;
743
+ true
744
+ gap> s.3 ^ map = t.1 * t.2;
745
+ true
746
+ gap> RespectsMultiplication(map);
747
+ true
748
+ gap> (s.1 * s.2) ^ map = s.3 ^ map;
749
+ true
750
+ gap> (s.1 * s.2 * s.1 * s.2 * s.1) ^ map = (s.1 * s.2 * s.1) ^ map;
751
+ true
752
+ gap> (s.3 ^ 2) ^ map = (s.2 * s.3) ^ map;
753
+ true
754
+ gap> inv := InverseGeneralMapping(map);;
755
+ gap> t.1 ^ inv = s.1;
756
+ true
757
+ gap> t.2 ^ inv = s.2;
758
+ true
759
+ gap> t.3 ^ inv = s.1 * s.2 * s.1;
760
+ true
761
+ gap> RespectsMultiplication(inv);
762
+ true
763
+ gap> GeneratorsOfSemigroup(t);
764
+ [ a, b, d ]
765
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
766
+
767
+ # Test SimplifiedFpSemigroup
768
+ gap> prevFpSemigroupInfoLevel := InfoLevel(InfoFpSemigroup);;
769
+ gap> SetInfoLevel(InfoFpSemigroup, 1);;
770
+ gap> s := AsSemigroup(IsFpSemigroup, FullTransformationSemigroup(3));;
771
+ gap> t := SimplifiedFpSemigroup(s);;
772
+ gap> s := AsSemigroup(IsTransformationSemigroup, s);;
773
+ gap> t := AsSemigroup(IsTransformationSemigroup, t);;
774
+ gap> IsomorphismSemigroups(s, t) <> fail;
775
+ true
776
+ gap> SetInfoLevel(InfoFpSemigroup, prevFpSemigroupInfoLevel);;
777
+
778
+ #
779
+ gap> SEMIGROUPS.StopTest();
780
+ gap> STOP_TEST("Semigroups package: standard/fp/tietze.tst");