1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717
|
% generated by GAPDoc2LaTeX from XML source (Frank Luebeck)
\documentclass[a4paper,11pt]{report}
\usepackage[top=37mm,bottom=37mm,left=27mm,right=27mm]{geometry}
\sloppy
\pagestyle{myheadings}
\usepackage{amssymb}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\makeindex
\usepackage{color}
\definecolor{FireBrick}{rgb}{0.5812,0.0074,0.0083}
\definecolor{RoyalBlue}{rgb}{0.0236,0.0894,0.6179}
\definecolor{RoyalGreen}{rgb}{0.0236,0.6179,0.0894}
\definecolor{RoyalRed}{rgb}{0.6179,0.0236,0.0894}
\definecolor{LightBlue}{rgb}{0.8544,0.9511,1.0000}
\definecolor{Black}{rgb}{0.0,0.0,0.0}
\definecolor{linkColor}{rgb}{0.0,0.0,0.554}
\definecolor{citeColor}{rgb}{0.0,0.0,0.554}
\definecolor{fileColor}{rgb}{0.0,0.0,0.554}
\definecolor{urlColor}{rgb}{0.0,0.0,0.554}
\definecolor{promptColor}{rgb}{0.0,0.0,0.589}
\definecolor{brkpromptColor}{rgb}{0.589,0.0,0.0}
\definecolor{gapinputColor}{rgb}{0.589,0.0,0.0}
\definecolor{gapoutputColor}{rgb}{0.0,0.0,0.0}
%% for a long time these were red and blue by default,
%% now black, but keep variables to overwrite
\definecolor{FuncColor}{rgb}{0.0,0.0,0.0}
%% strange name because of pdflatex bug:
\definecolor{Chapter }{rgb}{0.0,0.0,0.0}
\definecolor{DarkOlive}{rgb}{0.1047,0.2412,0.0064}
\usepackage{fancyvrb}
\usepackage{mathptmx,helvet}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[
pdftex=true,
bookmarks=true,
a4paper=true,
pdftitle={Written with GAPDoc},
pdfcreator={LaTeX with hyperref package / GAPDoc},
colorlinks=true,
backref=page,
breaklinks=true,
linkcolor=linkColor,
citecolor=citeColor,
filecolor=fileColor,
urlcolor=urlColor,
pdfpagemode={UseNone},
]{hyperref}
\newcommand{\maintitlesize}{\fontsize{50}{55}\selectfont}
% write page numbers to a .pnr log file for online help
\newwrite\pagenrlog
\immediate\openout\pagenrlog =\jobname.pnr
\immediate\write\pagenrlog{PAGENRS := [}
\newcommand{\logpage}[1]{\protect\write\pagenrlog{#1, \thepage,}}
%% were never documented, give conflicts with some additional packages
\newcommand{\GAP}{\textsf{GAP}}
%% nicer description environments, allows long labels
\usepackage{enumitem}
\setdescription{style=nextline}
%% depth of toc
\setcounter{tocdepth}{1}
%% command for ColorPrompt style examples
\newcommand{\gapprompt}[1]{\color{promptColor}{\bfseries #1}}
\newcommand{\gapbrkprompt}[1]{\color{brkpromptColor}{\bfseries #1}}
\newcommand{\gapinput}[1]{\color{gapinputColor}{#1}}
\begin{document}
\logpage{[ 0, 0, 0 ]}
\begin{titlepage}
\mbox{}\vfill
\begin{center}{\maintitlesize \textbf{ Polycyclic \mbox{}}}\\
\vfill
\hypersetup{pdftitle= Polycyclic }
\markright{\scriptsize \mbox{}\hfill Polycyclic \hfill\mbox{}}
{\Huge \textbf{ Computation with polycyclic groups \mbox{}}}\\
\vfill
{\Huge 2.17 \mbox{}}\\[1cm]
{ 28 August 2025 \mbox{}}\\[1cm]
\mbox{}\\[2cm]
{\Large \textbf{ Bettina Eick\\
\mbox{}}}\\
{\Large \textbf{ Werner Nickel\\
\mbox{}}}\\
{\Large \textbf{ Max Horn\\
\mbox{}}}\\
\hypersetup{pdfauthor= Bettina Eick\\
; Werner Nickel\\
; Max Horn\\
}
\end{center}\vfill
\mbox{}\\
{\mbox{}\\
\small \noindent \textbf{ Bettina Eick\\
} Email: \href{mailto://beick@tu-bs.de} {\texttt{beick@tu\texttt{\symbol{45}}bs.de}}\\
Homepage: \href{http://www.iaa.tu-bs.de/beick} {\texttt{http://www.iaa.tu\texttt{\symbol{45}}bs.de/beick}}\\
Address: \begin{minipage}[t]{8cm}\noindent
Institut Analysis und Algebra\\
TU Braunschweig\\
Universit{\"a}tsplatz 2\\
D\texttt{\symbol{45}}38106 Braunschweig\\
Germany\\
\end{minipage}
}\\
{\mbox{}\\
\small \noindent \textbf{ Werner Nickel\\
}\\
Homepage: \href{http://www.mathematik.tu-darmstadt.de/~nickel/} {\texttt{http://www.mathematik.tu\texttt{\symbol{45}}darmstadt.de/\texttt{\symbol{126}}nickel/}}}\\
{\mbox{}\\
\small \noindent \textbf{ Max Horn\\
} Email: \href{mailto://mhorn@rptu.de} {\texttt{mhorn@rptu.de}}\\
Homepage: \href{https://www.quendi.de/math} {\texttt{https://www.quendi.de/math}}\\
Address: \begin{minipage}[t]{8cm}\noindent
Fachbereich Mathematik\\
RPTU Kaiserslautern\texttt{\symbol{45}}Landau\\
Gottlieb\texttt{\symbol{45}}Daimler\texttt{\symbol{45}}Stra{\ss}e 48\\
67663 Kaiserslautern\\
Germany\\
\end{minipage}
}\\
\end{titlepage}
\newpage\setcounter{page}{2}
{\small
\section*{Copyright}
\logpage{[ 0, 0, 1 ]}
\index{License} {\copyright} 2003\texttt{\symbol{45}}2018 by Bettina Eick, Max Horn and Werner
Nickel
The \textsf{Polycyclic} package is free software; you can redistribute it and/or modify it under the
terms of the \href{http://www.fsf.org/licenses/gpl.html} {GNU General Public License} as published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version. \mbox{}}\\[1cm]
{\small
\section*{Acknowledgements}
\logpage{[ 0, 0, 2 ]}
We appreciate very much all past and future comments, suggestions and
contributions to this package and its documentation provided by \textsf{GAP} users and developers. \mbox{}}\\[1cm]
\newpage
\def\contentsname{Contents\logpage{[ 0, 0, 3 ]}}
\tableofcontents
\newpage
\chapter{\textcolor{Chapter }{Preface}}\label{Preface}
\logpage{[ 1, 0, 0 ]}
\hyperdef{L}{X874E1D45845007FE}{}
{
A group $G$ is called \emph{polycyclic} if there exists a subnormal series in $G$ with cyclic factors. Every polycyclic group is soluble and every supersoluble
group is polycyclic. The class of polycyclic groups is closed with respect to
forming subgroups, factor groups and extensions. Polycyclic groups can also be
characterised as those soluble groups in which each subgroup is finitely
generated.
K. A. Hirsch has initiated the investigation of polycyclic groups in 1938, see \cite{Hir38a}, \cite{Hir38b}, \cite{Hir46}, \cite{Hir52}, \cite{Hir54}, and their central position in infinite group theory has been recognised
since.
A well\texttt{\symbol{45}}known result of Hirsch asserts that each polycyclic
group is finitely presented. In fact, a polycyclic group has a presentation
which exhibits its polycyclic structure: a \emph{pc\texttt{\symbol{45}}presentation} as defined in the Chapter \hyperref[Introduction to polycyclic presentations]{`Introduction to polycyclic presentations'}. Pc\texttt{\symbol{45}}presentations allow efficient computations with the
groups they define. In particular, the word problem is efficiently solvable in
a group given by a pc\texttt{\symbol{45}}presentation. Further, subgroups and
factor groups of groups given by a pc\texttt{\symbol{45}}presentation can be
handled effectively.
The \textsf{GAP} 4 package \textsf{Polycyclic} is designed for computations with polycyclic groups which are given by a
pc\texttt{\symbol{45}}presentation. The package contains methods to solve the
word problem in such groups and to handle subgroups and factor groups of
polycyclic groups. Based on these basic algorithms we present a collection of
methods to construct polycyclic groups and to investigate their structure.
In \cite{BCRS91} and \cite{Seg90} the theory of problems which are decidable in
polycyclic\texttt{\symbol{45}}by\texttt{\symbol{45}}finite groups has been
started. As a result of these investigation we know that a large number of
group theoretic problems are decidable by algorithms in polycyclic groups.
However, practical algorithms which are suitable for computer implementations
have not been obtained by this study. We have developed a new set of practical
methods for groups given by pc\texttt{\symbol{45}}presentations, see for
example \cite{Eic00}, and this package is a collection of implementations for these and other
methods.
We refer to \cite{Rob82}, page 147ff, and \cite{Seg83} for background on polycyclic groups. Further, in \cite{Sims94} a variation of the basic methods for groups with
pc\texttt{\symbol{45}}presentation is introduced. Finally, we note that the
main GAP library contains many practical algorithms to compute with finite
polycyclic groups. This is described in the Section on polycyclic groups in
the reference manual. }
\chapter{\textcolor{Chapter }{Introduction to polycyclic presentations}}\label{Introduction to polycyclic presentations}
\logpage{[ 2, 0, 0 ]}
\hyperdef{L}{X792561B378D95B23}{}
{
Let $G$ be a polycyclic group and let $G = C_1 \rhd C_2 \ldots C_n\rhd C_{n+1} = 1$ be a \emph{polycyclic series}, that is, a subnormal series of $G$ with non\texttt{\symbol{45}}trivial cyclic factors. For $1 \leq i \leq n$ we choose $g_i \in C_i$ such that $C_i = \langle g_i, C_{i+1} \rangle$. Then the sequence $(g_1, \ldots, g_n)$ is called a \emph{polycyclic generating sequence of $G$}. Let $I$ be the set of those $i \in \{1, \ldots, n\}$ with $r_i := [C_i : C_{i+1}]$ finite. Each element of $G$ can be written \mbox{\texttt{\mdseries\slshape uniquely}} as $g_1^{e_1}\cdots g_n^{e_n}$ with $e_i\in {\ensuremath{\mathbb Z}}$ for $1\leq i\leq n$ and $0\leq e_i < r_i$ for $i\in I$.
Each polycyclic generating sequence of $G$ gives rise to a \emph{power\texttt{\symbol{45}}conjugate (pc\texttt{\symbol{45}}) presentation} for $G$ with the conjugate relations
\[g_j^{g_i} = g_{i+1}^{e(i,j,i+1)} \cdots g_n^{e(i,j,n)} \hbox{ for } 1 \leq i <
j \leq n,\]
\[g_j^{g_i^{-1}} = g_{i+1}^{f(i,j,i+1)} \cdots g_n^{f(i,j,n)} \hbox{ for } 1
\leq i < j \leq n,\]
and the power relations
\[g_i^{r_i} = g_{i+1}^{l(i,i+1)} \cdots g_n^{l(i,n)} \hbox{ for } i \in I.\]
Vice versa, we say that a group $G$ is defined by a pc\texttt{\symbol{45}}presentation if $G$ is given by a presentation of the form above on generators $g_1,\ldots,g_n$. These generators are the \emph{defining generators} of $G$. Here, $I$ is the set of $1\leq i\leq n$ such that $g_i$ has a power relation. The positive integer $r_i$ for $i\in I$ is called the \emph{relative order} of $g_i$. If $G$ is given by a pc\texttt{\symbol{45}}presentation, then $G$ is polycyclic. The subgroups $C_i = \langle g_i, \ldots, g_n \rangle$ form a subnormal series $G = C_1 \geq \ldots \geq C_{n+1} = 1$ with cyclic factors and we have that $g_i^{r_i}\in C_{i+1}$. However, some of the factors of this series may be smaller than $r_i$ for $i\in I$ or finite if $i\not\in I$.
If $G$ is defined by a pc\texttt{\symbol{45}}presentation, then each element of $G$ can be described by a word of the form $g_1^{e_1}\cdots g_n^{e_n}$ in the defining generators with $e_i\in {\ensuremath{\mathbb Z}}$ for $1\leq i\leq n$ and $0\leq e_i < r_i$ for $i\in I$. Such a word is said to be in \emph{collected form}. In general, an element of the group can be represented by more than one
collected word. If the pc\texttt{\symbol{45}}presentation has the property
that each element of $G$ has precisely one word in collected form, then the presentation is called \emph{confluent} or \emph{consistent}. If that is the case, the generators with a power relation correspond
precisely to the finite factors in the polycyclic series and $r_i$ is the order of $C_i/C_{i+1}$.
The \textsf{GAP} package \textsf{Polycyclic} is designed for computations with polycyclic groups which are given by
consistent pc\texttt{\symbol{45}}presentations. In particular, all the
functions described below assume that we compute with a group defined by a
consistent pc\texttt{\symbol{45}}presentation. See Chapter \hyperref[Collectors]{`Collectors'} for a routine that checks the consistency of a
pc\texttt{\symbol{45}}presentation.
A pc\texttt{\symbol{45}}presentation can be interpreted as a \emph{rewriting system} in the following way. One needs to add a new generator $G_i$ for each generator $g_i$ together with the relations $g_iG_i = 1$ and $G_ig_i = 1$. Any occurrence in a relation of an inverse generator $g_i^{-1}$ is replaced by $G_i$. In this way one obtains a monoid presentation for the group $G$. With respect to a particular ordering on the set of monoid words in the
generators $g_1,\ldots g_n,G_1,\ldots G_n$, the \emph{wreath product ordering}, this monoid presentation is a rewriting system. If the
pc\texttt{\symbol{45}}presentation is consistent, the rewriting system is
confluent.
In this package we do not address this aspect of
pc\texttt{\symbol{45}}presentations because it is of little relevance for the
algorithms implemented here. For the definition of rewriting systems and
confluence in this context as well as further details on the connections
between pc\texttt{\symbol{45}}presentations and rewriting systems we recommend
the book \cite{Sims94}. }
\chapter{\textcolor{Chapter }{Collectors}}\label{Collectors}
\logpage{[ 3, 0, 0 ]}
\hyperdef{L}{X792305CC81E8606A}{}
{
Let $G$ be a group defined by a pc\texttt{\symbol{45}}presentation as described in the
Chapter \hyperref[Introduction to polycyclic presentations]{`Introduction to polycyclic presentations'}.
The process for computing the collected form for an arbitrary word in the
generators of $G$ is called \emph{collection}. The basic idea in collection is the following. Given a word in the defining
generators, one scans the word for occurrences of adjacent generators (or
their inverses) in the wrong order or occurrences of subwords $g_i^{e_i}$ with $i\in I$ and $e_i$ not in the range $0\ldots r_{i}-1$. In the first case, the appropriate conjugacy relation is used to move the
generator with the smaller index to the left. In the second case, one uses the
appropriate power relation to move the exponent of $g_i$ into the required range. These steps are repeated until a collected word is
obtained.
There exist a number of different strategies for collecting a given word to
collected form. The strategies implemented in this package are \emph{collection from the left} as described by \cite{LGS90} and \cite{Sims94} and \emph{combinatorial collection from the left} by \cite{MVL90}. In addition, the package provides access to Hall polynomials computed by
Deep Thought for the multiplication in a nilpotent group, see \cite{WWM97} and \cite{LGS98}.
The first step in defining a pc\texttt{\symbol{45}}presented group is setting
up a data structure that knows the pc\texttt{\symbol{45}}presentation and has
routines that perform the collection algorithm with words in the generators of
the presentation. Such a data structure is called \emph{a collector}.
To describe the right hand sides of the relations in a
pc\texttt{\symbol{45}}presentation we use \emph{generator exponent lists}; the word $g_{i_1}^{e_1}g_{i_2}^{e_2}\ldots g_{i_k}^{e_k}$ is represented by the generator exponent list $[i_1,e_1,i_2,e_2,\ldots,i_k,e_k]$.
\section{\textcolor{Chapter }{Constructing a Collector}}\label{Constructing a Collector}
\logpage{[ 3, 1, 0 ]}
\hyperdef{L}{X800FD91386C08CD8}{}
{
A collector for a group given by a pc\texttt{\symbol{45}}presentation starts
by setting up an empty data structure for the collector. Then the relative
orders, the power relations and the conjugate relations are added into the
data structure. The construction is finalised by calling a routine that
completes the data structure for the collector. The following functions
provide the necessary tools for setting up a collector.
\subsection{\textcolor{Chapter }{FromTheLeftCollector}}
\logpage{[ 3, 1, 1 ]}\nobreak
\hyperdef{L}{X8382A4E78706DE65}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FromTheLeftCollector({\mdseries\slshape n})\index{FromTheLeftCollector@\texttt{FromTheLeftCollector}}
\label{FromTheLeftCollector}
}\hfill{\scriptsize (operation)}}\\
returns an empty data structure for a collector with \mbox{\texttt{\mdseries\slshape n}} generators. No generator has a relative order, no right hand sides of power
and conjugate relations are defined. Two generators for which no right hand
side of a conjugate relation is defined commute. Therefore, the collector
returned by this function can be used to define a free abelian group of rank \mbox{\texttt{\mdseries\slshape n}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@ftl := FromTheLeftCollector( 4 );|
<<from the left collector with 4 generators>>
!gapprompt@gap>| !gapinput@PcpGroupByCollector( ftl );|
Pcp-group with orders [ 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@IsAbelian(last);|
true
\end{Verbatim}
If the relative order of a generators has been defined (see \texttt{SetRelativeOrder} (\ref{SetRelativeOrder})), but the right hand side of the corresponding power relation has not, then
the order and the relative order of the generator are the same. }
\subsection{\textcolor{Chapter }{SetRelativeOrder}}
\logpage{[ 3, 1, 2 ]}\nobreak
\hyperdef{L}{X79A308B28183493B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetRelativeOrder({\mdseries\slshape coll, i, ro})\index{SetRelativeOrder@\texttt{SetRelativeOrder}}
\label{SetRelativeOrder}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetRelativeOrderNC({\mdseries\slshape coll, i, ro})\index{SetRelativeOrderNC@\texttt{SetRelativeOrderNC}}
\label{SetRelativeOrderNC}
}\hfill{\scriptsize (operation)}}\\
set the relative order in collector \mbox{\texttt{\mdseries\slshape coll}} for generator \mbox{\texttt{\mdseries\slshape i}} to \mbox{\texttt{\mdseries\slshape ro}}. The parameter \mbox{\texttt{\mdseries\slshape coll}} is a collector as returned by the function \texttt{FromTheLeftCollector} (\ref{FromTheLeftCollector}), \mbox{\texttt{\mdseries\slshape i}} is a generator number and \mbox{\texttt{\mdseries\slshape ro}} is a non\texttt{\symbol{45}}negative integer. The generator number \mbox{\texttt{\mdseries\slshape i}} is an integer in the range $1,\ldots,n$ where $n$ is the number of generators of the collector.
If \mbox{\texttt{\mdseries\slshape ro}} is $0,$ then the generator with number \mbox{\texttt{\mdseries\slshape i}} has infinite order and no power relation can be specified. As a side effect in
this case, a previously defined power relation is deleted.
If \mbox{\texttt{\mdseries\slshape ro}} is the relative order of a generator with number \mbox{\texttt{\mdseries\slshape i}} and no power relation is set for that generator, then \mbox{\texttt{\mdseries\slshape ro}} is the order of that generator.
The NC version of the function bypasses checks on the range of \mbox{\texttt{\mdseries\slshape i}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@ftl := FromTheLeftCollector( 4 );|
<<from the left collector with 4 generators>>
!gapprompt@gap>| !gapinput@for i in [1..4] do SetRelativeOrder( ftl, i, 3 ); od;|
!gapprompt@gap>| !gapinput@G := PcpGroupByCollector( ftl );|
Pcp-group with orders [ 3, 3, 3, 3 ]
!gapprompt@gap>| !gapinput@IsElementaryAbelian( G );|
true
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{SetPower}}
\logpage{[ 3, 1, 3 ]}\nobreak
\hyperdef{L}{X7BC319BA8698420C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetPower({\mdseries\slshape coll, i, rhs})\index{SetPower@\texttt{SetPower}}
\label{SetPower}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetPowerNC({\mdseries\slshape coll, i, rhs})\index{SetPowerNC@\texttt{SetPowerNC}}
\label{SetPowerNC}
}\hfill{\scriptsize (operation)}}\\
set the right hand side of the power relation for generator \mbox{\texttt{\mdseries\slshape i}} in collector \mbox{\texttt{\mdseries\slshape coll}} to (a copy of) \mbox{\texttt{\mdseries\slshape rhs}}. An attempt to set the right hand side for a generator without a relative
order results in an error.
Right hand sides are by default assumed to be trivial.
The parameter \mbox{\texttt{\mdseries\slshape coll}} is a collector, \mbox{\texttt{\mdseries\slshape i}} is a generator number and \mbox{\texttt{\mdseries\slshape rhs}} is a generators exponent list or an element from a free group.
The no\texttt{\symbol{45}}check (NC) version of the function bypasses checks
on the range of \mbox{\texttt{\mdseries\slshape i}} and stores \mbox{\texttt{\mdseries\slshape rhs}} (instead of a copy) in the collector. }
\subsection{\textcolor{Chapter }{SetConjugate}}
\logpage{[ 3, 1, 4 ]}\nobreak
\hyperdef{L}{X86A08D887E049347}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetConjugate({\mdseries\slshape coll, j, i, rhs})\index{SetConjugate@\texttt{SetConjugate}}
\label{SetConjugate}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetConjugateNC({\mdseries\slshape coll, j, i, rhs})\index{SetConjugateNC@\texttt{SetConjugateNC}}
\label{SetConjugateNC}
}\hfill{\scriptsize (operation)}}\\
set the right hand side of the conjugate relation for the generators \mbox{\texttt{\mdseries\slshape j}} and \mbox{\texttt{\mdseries\slshape i}} with \mbox{\texttt{\mdseries\slshape j}} larger than \mbox{\texttt{\mdseries\slshape i}}. The parameter \mbox{\texttt{\mdseries\slshape coll}} is a collector, \mbox{\texttt{\mdseries\slshape j}} and \mbox{\texttt{\mdseries\slshape i}} are generator numbers and \mbox{\texttt{\mdseries\slshape rhs}} is a generator exponent list or an element from a free group. Conjugate
relations are by default assumed to be trivial.
The generator number \mbox{\texttt{\mdseries\slshape i}} can be negative in order to define conjugation by the inverse of a generator.
The no\texttt{\symbol{45}}check (NC) version of the function bypasses checks
on the range of \mbox{\texttt{\mdseries\slshape i}} and \mbox{\texttt{\mdseries\slshape j}} and stores \mbox{\texttt{\mdseries\slshape rhs}} (instead of a copy) in the collector. }
\subsection{\textcolor{Chapter }{SetCommutator}}
\logpage{[ 3, 1, 5 ]}\nobreak
\hyperdef{L}{X7B25997C7DF92B6D}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SetCommutator({\mdseries\slshape coll, j, i, rhs})\index{SetCommutator@\texttt{SetCommutator}}
\label{SetCommutator}
}\hfill{\scriptsize (operation)}}\\
set the right hand side of the conjugate relation for the generators \mbox{\texttt{\mdseries\slshape j}} and \mbox{\texttt{\mdseries\slshape i}} with \mbox{\texttt{\mdseries\slshape j}} larger than \mbox{\texttt{\mdseries\slshape i}} by specifying the commutator of \mbox{\texttt{\mdseries\slshape j}} and \mbox{\texttt{\mdseries\slshape i}}. The parameter \mbox{\texttt{\mdseries\slshape coll}} is a collector, \mbox{\texttt{\mdseries\slshape j}} and \mbox{\texttt{\mdseries\slshape i}} are generator numbers and \mbox{\texttt{\mdseries\slshape rhs}} is a generator exponent list or an element from a free group.
The generator number \mbox{\texttt{\mdseries\slshape i}} can be negative in order to define the right hand side of a commutator
relation with the second generator being the inverse of a generator. }
\subsection{\textcolor{Chapter }{UpdatePolycyclicCollector}}
\logpage{[ 3, 1, 6 ]}\nobreak
\hyperdef{L}{X7E9903F57BC5CC24}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{UpdatePolycyclicCollector({\mdseries\slshape coll})\index{UpdatePolycyclicCollector@\texttt{UpdatePolycyclicCollector}}
\label{UpdatePolycyclicCollector}
}\hfill{\scriptsize (operation)}}\\
completes the data structures of a collector. This is usually the last step in
setting up a collector. Among the steps performed is the completion of the
conjugate relations. For each non\texttt{\symbol{45}}trivial conjugate
relation of a generator, the corresponding conjugate relation of the inverse
generator is calculated.
Note that \texttt{UpdatePolycyclicCollector} is automatically called by the function \texttt{PcpGroupByCollector} (see \texttt{PcpGroupByCollector} (\ref{PcpGroupByCollector})). }
\subsection{\textcolor{Chapter }{IsConfluent}}
\logpage{[ 3, 1, 7 ]}\nobreak
\hyperdef{L}{X8006790B86328CE8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsConfluent({\mdseries\slshape coll})\index{IsConfluent@\texttt{IsConfluent}}
\label{IsConfluent}
}\hfill{\scriptsize (property)}}\\
tests if the collector \mbox{\texttt{\mdseries\slshape coll}} is confluent. The function returns true or false accordingly.
Compare Chapter \ref{Introduction to polycyclic presentations} for a definition of confluence.
Note that confluence is automatically checked by the function \texttt{PcpGroupByCollector} (see \texttt{PcpGroupByCollector} (\ref{PcpGroupByCollector})).
The following example defines a collector for a semidirect product of the
cyclic group of order $3$ with the free abelian group of rank $2$. The action of the cyclic group on the free abelian group is given by the
matrix
\[\pmatrix{ 0 & 1 \cr -1 & -1}.\]
This leads to the following polycyclic presentation:
\[\langle g_1,g_2,g_3 | g_1^3, g_2^{g_1}=g_3, g_3^{g_1}=g_2^{-1}g_3^{-1},
g_3^{g_2}=g_3\rangle.\]
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@ftl := FromTheLeftCollector( 3 );|
<<from the left collector with 3 generators>>
!gapprompt@gap>| !gapinput@SetRelativeOrder( ftl, 1, 3 );|
!gapprompt@gap>| !gapinput@SetConjugate( ftl, 2, 1, [3,1] );|
!gapprompt@gap>| !gapinput@SetConjugate( ftl, 3, 1, [2,-1,3,-1] );|
!gapprompt@gap>| !gapinput@UpdatePolycyclicCollector( ftl );|
!gapprompt@gap>| !gapinput@IsConfluent( ftl );|
true
\end{Verbatim}
The action of the inverse of $g_1$ on $\langle g_2,g_2\rangle$ is given by the matrix
\[\pmatrix{ -1 & -1 \cr 1 & 0}.\]
The corresponding conjugate relations are automatically computed by \texttt{UpdatePolycyclicCollector}. It is also possible to specify the conjugation by inverse generators. Note
that you need to run \texttt{UpdatePolycyclicCollector} after one of the set functions has been used.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@SetConjugate( ftl, 2, -1, [2,-1,3,-1] );|
!gapprompt@gap>| !gapinput@SetConjugate( ftl, 3, -1, [2,1] );|
!gapprompt@gap>| !gapinput@IsConfluent( ftl );|
Error, Collector is out of date called from
CollectWordOrFail( coll, ev1, [ j, 1, i, 1 ] ); called from
<function>( <arguments> ) called from read-eval-loop
Entering break read-eval-print loop ...
you can 'quit;' to quit to outer loop, or
you can 'return;' to continue
!gapbrkprompt@brk>| !gapinput@|
!gapprompt@gap>| !gapinput@UpdatePolycyclicCollector( ftl );|
!gapprompt@gap>| !gapinput@IsConfluent( ftl );|
true
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Accessing Parts of a Collector}}\label{Accessing Parts of a Collector}
\logpage{[ 3, 2, 0 ]}
\hyperdef{L}{X818484817C3BAAE6}{}
{
\subsection{\textcolor{Chapter }{RelativeOrders}}
\logpage{[ 3, 2, 1 ]}\nobreak
\hyperdef{L}{X7DD0DF677AC1CF10}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RelativeOrders({\mdseries\slshape coll})\index{RelativeOrders@\texttt{RelativeOrders}}
\label{RelativeOrders}
}\hfill{\scriptsize (attribute)}}\\
returns (a copy of) the list of relative order stored in the collector \mbox{\texttt{\mdseries\slshape coll}}. }
\subsection{\textcolor{Chapter }{GetPower}}
\logpage{[ 3, 2, 2 ]}\nobreak
\hyperdef{L}{X844C0A478735EF4B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GetPower({\mdseries\slshape coll, i})\index{GetPower@\texttt{GetPower}}
\label{GetPower}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GetPowerNC({\mdseries\slshape coll, i})\index{GetPowerNC@\texttt{GetPowerNC}}
\label{GetPowerNC}
}\hfill{\scriptsize (operation)}}\\
returns a copy of the generator exponent list stored for the right hand side
of the power relation of the generator \mbox{\texttt{\mdseries\slshape i}} in the collector \mbox{\texttt{\mdseries\slshape coll}}.
The no\texttt{\symbol{45}}check (NC) version of the function bypasses checks
on the range of \mbox{\texttt{\mdseries\slshape i}} and does not create a copy before returning the right hand side of the power
relation. }
\subsection{\textcolor{Chapter }{GetConjugate}}
\logpage{[ 3, 2, 3 ]}\nobreak
\hyperdef{L}{X865160E07FA93E00}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GetConjugate({\mdseries\slshape coll, j, i})\index{GetConjugate@\texttt{GetConjugate}}
\label{GetConjugate}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GetConjugateNC({\mdseries\slshape coll, j, i})\index{GetConjugateNC@\texttt{GetConjugateNC}}
\label{GetConjugateNC}
}\hfill{\scriptsize (operation)}}\\
returns a copy of the right hand side of the conjugate relation stored for the
generators \mbox{\texttt{\mdseries\slshape j}} and \mbox{\texttt{\mdseries\slshape i}} in the collector \mbox{\texttt{\mdseries\slshape coll}} as generator exponent list. The generator \mbox{\texttt{\mdseries\slshape j}} must be larger than \mbox{\texttt{\mdseries\slshape i}}.
The no\texttt{\symbol{45}}check (NC) version of the function bypasses checks
on the range of \mbox{\texttt{\mdseries\slshape i}} and \mbox{\texttt{\mdseries\slshape j}} and does not create a copy before returning the right hand side of the power
relation. }
\subsection{\textcolor{Chapter }{NumberOfGenerators}}
\logpage{[ 3, 2, 4 ]}\nobreak
\hyperdef{L}{X7D6A26A4871FF51A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NumberOfGenerators({\mdseries\slshape coll})\index{NumberOfGenerators@\texttt{NumberOfGenerators}}
\label{NumberOfGenerators}
}\hfill{\scriptsize (operation)}}\\
returns the number of generators of the collector \mbox{\texttt{\mdseries\slshape coll}}. }
\subsection{\textcolor{Chapter }{ObjByExponents}}
\logpage{[ 3, 2, 5 ]}\nobreak
\hyperdef{L}{X873ECF388503E5DE}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ObjByExponents({\mdseries\slshape coll, expvec})\index{ObjByExponents@\texttt{ObjByExponents}}
\label{ObjByExponents}
}\hfill{\scriptsize (operation)}}\\
returns a generator exponent list for the exponent vector \mbox{\texttt{\mdseries\slshape expvec}}. This is the inverse operation to \texttt{ExponentsByObj}. See \texttt{ExponentsByObj} (\ref{ExponentsByObj}) for an example. }
\subsection{\textcolor{Chapter }{ExponentsByObj}}
\logpage{[ 3, 2, 6 ]}\nobreak
\hyperdef{L}{X85BCB97B8021EAD6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ExponentsByObj({\mdseries\slshape coll, genexp})\index{ExponentsByObj@\texttt{ExponentsByObj}}
\label{ExponentsByObj}
}\hfill{\scriptsize (operation)}}\\
returns an exponent vector for the generator exponent list \mbox{\texttt{\mdseries\slshape genexp}}. This is the inverse operation to \texttt{ObjByExponents}. The function assumes that the generators in \mbox{\texttt{\mdseries\slshape genexp}} are given in the right order and that the exponents are in the right range.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := UnitriangularPcpGroup( 4, 0 );|
Pcp-group with orders [ 0, 0, 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@coll := Collector ( G );|
<<from the left collector with 6 generators>>
!gapprompt@gap>| !gapinput@ObjByExponents( coll, [6,-5,4,3,-2,1] );|
[ 1, 6, 2, -5, 3, 4, 4, 3, 5, -2, 6, 1 ]
!gapprompt@gap>| !gapinput@ExponentsByObj( coll, last );|
[ 6, -5, 4, 3, -2, 1 ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Special Features}}\label{Special Features}
\logpage{[ 3, 3, 0 ]}
\hyperdef{L}{X79AEB3477800DC16}{}
{
In this section we descibe collectors for nilpotent groups which make use of
the special structure of the given pc\texttt{\symbol{45}}presentation.
\subsection{\textcolor{Chapter }{IsWeightedCollector}}
\logpage{[ 3, 3, 1 ]}\nobreak
\hyperdef{L}{X82EE2ACD7B8C178B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsWeightedCollector({\mdseries\slshape coll})\index{IsWeightedCollector@\texttt{IsWeightedCollector}}
\label{IsWeightedCollector}
}\hfill{\scriptsize (property)}}\\
checks if there is a function $w$ from the generators of the collector \mbox{\texttt{\mdseries\slshape coll}} into the positive integers such that $w(g) \geq w(x)+w(y)$ for all generators $x$, $y$ and all generators $g$ in (the normal of) $[x,y]$. If such a function does not exist, false is returned. If such a function
exists, it is computed and stored in the collector. In addition, the default
collection strategy for this collector is set to combinatorial collection. }
\subsection{\textcolor{Chapter }{AddHallPolynomials}}
\logpage{[ 3, 3, 2 ]}\nobreak
\hyperdef{L}{X7A1D7ED68334282C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AddHallPolynomials({\mdseries\slshape coll})\index{AddHallPolynomials@\texttt{AddHallPolynomials}}
\label{AddHallPolynomials}
}\hfill{\scriptsize (function)}}\\
is applicable to a collector which passes \texttt{IsWeightedCollector} and computes the Hall multiplication polynomials for the presentation stored
in \mbox{\texttt{\mdseries\slshape coll}}. The default strategy for this collector is set to evaluating those
polynomial when multiplying two elements. }
\subsection{\textcolor{Chapter }{String}}
\logpage{[ 3, 3, 3 ]}\nobreak
\hyperdef{L}{X81FB5BE27903EC32}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{String({\mdseries\slshape coll})\index{String@\texttt{String}}
\label{String}
}\hfill{\scriptsize (attribute)}}\\
converts a collector \mbox{\texttt{\mdseries\slshape coll}} into a string. }
\subsection{\textcolor{Chapter }{FTLCollectorPrintTo}}
\logpage{[ 3, 3, 4 ]}\nobreak
\hyperdef{L}{X7ED466B6807D16FE}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FTLCollectorPrintTo({\mdseries\slshape file, name, coll})\index{FTLCollectorPrintTo@\texttt{FTLCollectorPrintTo}}
\label{FTLCollectorPrintTo}
}\hfill{\scriptsize (function)}}\\
stores a collector \mbox{\texttt{\mdseries\slshape coll}} in the file \mbox{\texttt{\mdseries\slshape file}} such that the file can be read back using the function 'Read' into \textsf{GAP} and would then be stored in the variable \mbox{\texttt{\mdseries\slshape name}}. }
\subsection{\textcolor{Chapter }{FTLCollectorAppendTo}}
\logpage{[ 3, 3, 5 ]}\nobreak
\hyperdef{L}{X789D9EB37ECFA9D7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FTLCollectorAppendTo({\mdseries\slshape file, name, coll})\index{FTLCollectorAppendTo@\texttt{FTLCollectorAppendTo}}
\label{FTLCollectorAppendTo}
}\hfill{\scriptsize (function)}}\\
appends a collector \mbox{\texttt{\mdseries\slshape coll}} in the file \mbox{\texttt{\mdseries\slshape file}} such that the file can be read back into \textsf{GAP} and would then be stored in the variable \mbox{\texttt{\mdseries\slshape name}}. }
\subsection{\textcolor{Chapter }{UseLibraryCollector}}
\logpage{[ 3, 3, 6 ]}\nobreak
\hyperdef{L}{X808A26FB873A354F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{UseLibraryCollector\index{UseLibraryCollector@\texttt{UseLibraryCollector}}
\label{UseLibraryCollector}
}\hfill{\scriptsize (global variable)}}\\
this property can be set to \texttt{true} for a collector to force a simple
from\texttt{\symbol{45}}the\texttt{\symbol{45}}left collection strategy
implemented in the \textsf{GAP} language to be used. Its main purpose is to help debug the collection
routines. }
\subsection{\textcolor{Chapter }{USE{\textunderscore}LIBRARY{\textunderscore}COLLECTOR}}
\logpage{[ 3, 3, 7 ]}\nobreak
\hyperdef{L}{X844E195C7D55F8BD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{USE{\textunderscore}LIBRARY{\textunderscore}COLLECTOR\index{USE{\textunderscore}LIBRARY{\textunderscore}COLLECTOR@\texttt{USE{\textunderscore}}\-\texttt{L}\-\texttt{I}\-\texttt{B}\-\texttt{R}\-\texttt{A}\-\texttt{R}\-\texttt{Y{\textunderscore}}\-\texttt{C}\-\texttt{O}\-\texttt{L}\-\texttt{L}\-\texttt{E}\-\texttt{CTOR}}
\label{USEuScoreLIBRARYuScoreCOLLECTOR}
}\hfill{\scriptsize (global variable)}}\\
this global variable can be set to \texttt{true} to force all collectors to use a simple
from\texttt{\symbol{45}}the\texttt{\symbol{45}}left collection strategy
implemented in the \textsf{GAP} language to be used. Its main purpose is to help debug the collection
routines. }
\subsection{\textcolor{Chapter }{DEBUG{\textunderscore}COMBINATORIAL{\textunderscore}COLLECTOR}}
\logpage{[ 3, 3, 8 ]}\nobreak
\hyperdef{L}{X7945C6B97BECCDA8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{DEBUG{\textunderscore}COMBINATORIAL{\textunderscore}COLLECTOR\index{DEBUG{\textunderscore}COMBINATORIAL{\textunderscore}COLLECTOR@\texttt{DEB}\-\texttt{U}\-\texttt{G{\textunderscore}}\-\texttt{C}\-\texttt{O}\-\texttt{M}\-\texttt{B}\-\texttt{I}\-\texttt{N}\-\texttt{A}\-\texttt{T}\-\texttt{O}\-\texttt{R}\-\texttt{I}\-\texttt{A}\-\texttt{L{\textunderscore}}\-\texttt{C}\-\texttt{O}\-\texttt{L}\-\texttt{L}\-\texttt{E}\-\texttt{CTOR}}
\label{DEBUGuScoreCOMBINATORIALuScoreCOLLECTOR}
}\hfill{\scriptsize (global variable)}}\\
this global variable can be set to \texttt{true} to force the comparison of results from the combinatorial collector with the
result of an identical collection performed by a simple
from\texttt{\symbol{45}}the\texttt{\symbol{45}}left collector. Its main
purpose is to help debug the collection routines. }
\subsection{\textcolor{Chapter }{USE{\textunderscore}COMBINATORIAL{\textunderscore}COLLECTOR}}
\logpage{[ 3, 3, 9 ]}\nobreak
\hyperdef{L}{X7BDFB55D7CB33543}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{USE{\textunderscore}COMBINATORIAL{\textunderscore}COLLECTOR\index{USE{\textunderscore}COMBINATORIAL{\textunderscore}COLLECTOR@\texttt{USE{\textunderscore}}\-\texttt{C}\-\texttt{O}\-\texttt{M}\-\texttt{B}\-\texttt{I}\-\texttt{N}\-\texttt{A}\-\texttt{T}\-\texttt{O}\-\texttt{R}\-\texttt{I}\-\texttt{A}\-\texttt{L{\textunderscore}}\-\texttt{C}\-\texttt{O}\-\texttt{L}\-\texttt{L}\-\texttt{E}\-\texttt{CTOR}}
\label{USEuScoreCOMBINATORIALuScoreCOLLECTOR}
}\hfill{\scriptsize (global variable)}}\\
this global variable can be set to \texttt{false} in order to prevent the combinatorial collector to be used. }
}
}
\chapter{\textcolor{Chapter }{Pcp\texttt{\symbol{45}}groups \texttt{\symbol{45}} polycyclically presented
groups}}\label{Pcp-groups - polycyclically presented groups}
\logpage{[ 4, 0, 0 ]}
\hyperdef{L}{X7E2AF25881CF7307}{}
{
\section{\textcolor{Chapter }{Pcp\texttt{\symbol{45}}elements \texttt{\symbol{45}}\texttt{\symbol{45}}
elements of a pc\texttt{\symbol{45}}presented group}}\label{Pcp-elements -- elements of a pc-presented group}
\logpage{[ 4, 1, 0 ]}
\hyperdef{L}{X7882F0F57ABEB680}{}
{
A \emph{pcp\texttt{\symbol{45}}element} is an element of a group defined by a consistent
pc\texttt{\symbol{45}}presentation given by a collector. Suppose that $g_1, \ldots, g_n$ are the defining generators of the collector. Recall that each element $g$ in this group can be written uniquely as a collected word $g_1^{e_1} \cdots g_n^{e_n}$ with $e_i \in {\ensuremath{\mathbb Z}}$ and $0 \leq e_i < r_i$ for $i \in I$. The integer vector $[e_1, \ldots, e_n]$ is called the \emph{exponent vector} of $g$. The following functions can be used to define
pcp\texttt{\symbol{45}}elements via their exponent vector or via an arbitrary
generator exponent word as introduced in Chapter \ref{Collectors}.
\subsection{\textcolor{Chapter }{PcpElementByExponentsNC}}
\logpage{[ 4, 1, 1 ]}\nobreak
\hyperdef{L}{X786DB93F7862D903}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpElementByExponentsNC({\mdseries\slshape coll, exp})\index{PcpElementByExponentsNC@\texttt{PcpElementByExponentsNC}}
\label{PcpElementByExponentsNC}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpElementByExponents({\mdseries\slshape coll, exp})\index{PcpElementByExponents@\texttt{PcpElementByExponents}}
\label{PcpElementByExponents}
}\hfill{\scriptsize (function)}}\\
returns the pcp\texttt{\symbol{45}}element with exponent vector \mbox{\texttt{\mdseries\slshape exp}}. The exponent vector is considered relative to the defining generators of the
pc\texttt{\symbol{45}}presentation. }
\subsection{\textcolor{Chapter }{PcpElementByGenExpListNC}}
\logpage{[ 4, 1, 2 ]}\nobreak
\hyperdef{L}{X7BBB358C7AA64135}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpElementByGenExpListNC({\mdseries\slshape coll, word})\index{PcpElementByGenExpListNC@\texttt{PcpElementByGenExpListNC}}
\label{PcpElementByGenExpListNC}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpElementByGenExpList({\mdseries\slshape coll, word})\index{PcpElementByGenExpList@\texttt{PcpElementByGenExpList}}
\label{PcpElementByGenExpList}
}\hfill{\scriptsize (function)}}\\
returns the pcp\texttt{\symbol{45}}element with generators exponent list \mbox{\texttt{\mdseries\slshape word}}. This list \mbox{\texttt{\mdseries\slshape word}} consists of a sequence of generator numbers and their corresponding exponents
and is of the form $[i_1, e_{i_1}, i_2, e_{i_2}, \ldots, i_r, e_{i_r}]$. The generators exponent list is considered relative to the defining
generators of the pc\texttt{\symbol{45}}presentation.
These functions return pcp\texttt{\symbol{45}}elements in the category \texttt{IsPcpElement}. Presently, the only representation implemented for this category is \texttt{IsPcpElementRep}. (This allows us to be a little sloppy right now. The basic set of operations
for \texttt{IsPcpElement} has not been defined yet. This is going to happen in one of the next version,
certainly as soon as the need for different representations arises.) }
\subsection{\textcolor{Chapter }{IsPcpElement}}
\logpage{[ 4, 1, 3 ]}\nobreak
\hyperdef{L}{X86083E297D68733B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsPcpElement({\mdseries\slshape obj})\index{IsPcpElement@\texttt{IsPcpElement}}
\label{IsPcpElement}
}\hfill{\scriptsize (Category)}}\\
returns true if the object \mbox{\texttt{\mdseries\slshape obj}} is a pcp\texttt{\symbol{45}}element. }
\subsection{\textcolor{Chapter }{IsPcpElementCollection}}
\logpage{[ 4, 1, 4 ]}\nobreak
\hyperdef{L}{X8695069A7D5073B7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsPcpElementCollection({\mdseries\slshape obj})\index{IsPcpElementCollection@\texttt{IsPcpElementCollection}}
\label{IsPcpElementCollection}
}\hfill{\scriptsize (Category)}}\\
returns true if the object \mbox{\texttt{\mdseries\slshape obj}} is a collection of pcp\texttt{\symbol{45}}elements. }
\subsection{\textcolor{Chapter }{IsPcpElementRep}}
\logpage{[ 4, 1, 5 ]}\nobreak
\hyperdef{L}{X7F2C83AD862910B9}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsPcpElementRep({\mdseries\slshape obj})\index{IsPcpElementRep@\texttt{IsPcpElementRep}}
\label{IsPcpElementRep}
}\hfill{\scriptsize (Representation)}}\\
returns true if the object \mbox{\texttt{\mdseries\slshape obj}} is represented as a pcp\texttt{\symbol{45}}element. }
\subsection{\textcolor{Chapter }{IsPcpGroup}}
\logpage{[ 4, 1, 6 ]}\nobreak
\hyperdef{L}{X8470284A78A6C41B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsPcpGroup({\mdseries\slshape obj})\index{IsPcpGroup@\texttt{IsPcpGroup}}
\label{IsPcpGroup}
}\hfill{\scriptsize (Filter)}}\\
returns true if the object \mbox{\texttt{\mdseries\slshape obj}} is a group and also a pcp\texttt{\symbol{45}}element collection. }
}
\section{\textcolor{Chapter }{Methods for pcp\texttt{\symbol{45}}elements}}\label{Methods for pcp-elements}
\logpage{[ 4, 2, 0 ]}
\hyperdef{L}{X790471D07A953E12}{}
{
Now we can describe attributes and functions for
pcp\texttt{\symbol{45}}elements. The four basic attributes of a
pcp\texttt{\symbol{45}}element, \texttt{Collector}, \texttt{Exponents}, \texttt{GenExpList} and \texttt{NameTag} are computed at the creation of the pcp\texttt{\symbol{45}}element. All other
attributes are determined at runtime.
Let \mbox{\texttt{\mdseries\slshape g}} be a pcp\texttt{\symbol{45}}element and $g_1, \ldots, g_n$ a polycyclic generating sequence of the underlying
pc\texttt{\symbol{45}}presented group. Let $C_1, \ldots, C_n$ be the polycyclic series defined by $g_1, \ldots, g_n$.
The \emph{depth} of a non\texttt{\symbol{45}}trivial element $g$ of a pcp\texttt{\symbol{45}}group (with respect to the defining generators) is
the integer $i$ such that $g \in C_i \setminus C_{i+1}$. The depth of the trivial element is defined to be $n+1$. If $g\not=1$ has depth $i$ and $g_i^{e_i} \cdots g_n^{e_n}$ is the collected word for $g$, then $e_i$ is the \emph{leading exponent} of $g$.
If $g$ has depth $i$, then we call $r_i = [C_i:C_{i+1}]$ the \emph{factor order} of $g$. If $r < \infty$, then the smallest positive integer $l$ with $g^l \in C_{i+1}$ is the called \emph{relative order} of $g$. If $r=\infty$, then the relative order of $g$ is defined to be $0$. The index $e$ of $\langle g,C_{i+1}\rangle$ in $C_i$ is called \emph{relative index} of $g$. We have that $r = el$.
We call a pcp\texttt{\symbol{45}}element \emph{normed}, if its leading exponent is equal to its relative index. For each
pcp\texttt{\symbol{45}}element $g$ there exists an integer $e$ such that $g^e$ is normed.
\subsection{\textcolor{Chapter }{Collector}}
\logpage{[ 4, 2, 1 ]}\nobreak
\hyperdef{L}{X7E2D258B7DCE8AC9}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Collector({\mdseries\slshape g})\index{Collector@\texttt{Collector}}
\label{Collector}
}\hfill{\scriptsize (operation)}}\\
the collector to which the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} belongs. }
\subsection{\textcolor{Chapter }{Exponents}}
\logpage{[ 4, 2, 2 ]}\nobreak
\hyperdef{L}{X85C672E78630C507}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Exponents({\mdseries\slshape g})\index{Exponents@\texttt{Exponents}}
\label{Exponents}
}\hfill{\scriptsize (operation)}}\\
returns the exponent vector of the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} with respect to the defining generating set of the underlying collector. }
\subsection{\textcolor{Chapter }{GenExpList}}
\logpage{[ 4, 2, 3 ]}\nobreak
\hyperdef{L}{X8571F6FB7E74346C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GenExpList({\mdseries\slshape g})\index{GenExpList@\texttt{GenExpList}}
\label{GenExpList}
}\hfill{\scriptsize (operation)}}\\
returns the generators exponent list of the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} with respect to the defining generating set of the underlying collector. }
\subsection{\textcolor{Chapter }{NameTag}}
\logpage{[ 4, 2, 4 ]}\nobreak
\hyperdef{L}{X82252C5E7B011559}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NameTag({\mdseries\slshape g})\index{NameTag@\texttt{NameTag}}
\label{NameTag}
}\hfill{\scriptsize (operation)}}\\
the name used for printing the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}}. Printing is done by using the name tag and appending the generator number of \mbox{\texttt{\mdseries\slshape g}}. }
\subsection{\textcolor{Chapter }{Depth}}
\logpage{[ 4, 2, 5 ]}\nobreak
\hyperdef{L}{X840D32D9837E99F5}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Depth({\mdseries\slshape g})\index{Depth@\texttt{Depth}}
\label{Depth}
}\hfill{\scriptsize (operation)}}\\
returns the depth of the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} relative to the defining generators. }
\subsection{\textcolor{Chapter }{LeadingExponent}}
\logpage{[ 4, 2, 6 ]}\nobreak
\hyperdef{L}{X874F1EC178721833}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{LeadingExponent({\mdseries\slshape g})\index{LeadingExponent@\texttt{LeadingExponent}}
\label{LeadingExponent}
}\hfill{\scriptsize (operation)}}\\
returns the leading exponent of pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} relative to the defining generators. If \mbox{\texttt{\mdseries\slshape g}} is the identity element, the functions returns 'fail' }
\subsection{\textcolor{Chapter }{RelativeOrder}}
\logpage{[ 4, 2, 7 ]}\nobreak
\hyperdef{L}{X8008AB61823A76B7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RelativeOrder({\mdseries\slshape g})\index{RelativeOrder@\texttt{RelativeOrder}}
\label{RelativeOrder}
}\hfill{\scriptsize (attribute)}}\\
returns the relative order of the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} with respect to the defining generators. }
\subsection{\textcolor{Chapter }{RelativeIndex}}
\logpage{[ 4, 2, 8 ]}\nobreak
\hyperdef{L}{X875D04288577015B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RelativeIndex({\mdseries\slshape g})\index{RelativeIndex@\texttt{RelativeIndex}}
\label{RelativeIndex}
}\hfill{\scriptsize (attribute)}}\\
returns the relative index of the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} with respect to the defining generators. }
\subsection{\textcolor{Chapter }{FactorOrder}}
\logpage{[ 4, 2, 9 ]}\nobreak
\hyperdef{L}{X87E070747955F2C1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FactorOrder({\mdseries\slshape g})\index{FactorOrder@\texttt{FactorOrder}}
\label{FactorOrder}
}\hfill{\scriptsize (attribute)}}\\
returns the factor order of the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} with respect to the defining generators. }
\subsection{\textcolor{Chapter }{NormingExponent}}
\logpage{[ 4, 2, 10 ]}\nobreak
\hyperdef{L}{X79A247797F0A8583}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NormingExponent({\mdseries\slshape g})\index{NormingExponent@\texttt{NormingExponent}}
\label{NormingExponent}
}\hfill{\scriptsize (function)}}\\
returns a positive integer $e$ such that the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}} raised to the power of $e$ is normed. }
\subsection{\textcolor{Chapter }{NormedPcpElement}}
\logpage{[ 4, 2, 11 ]}\nobreak
\hyperdef{L}{X798BB22B80833441}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NormedPcpElement({\mdseries\slshape g})\index{NormedPcpElement@\texttt{NormedPcpElement}}
\label{NormedPcpElement}
}\hfill{\scriptsize (function)}}\\
returns the normed element corresponding to the pcp\texttt{\symbol{45}}element \mbox{\texttt{\mdseries\slshape g}}. }
}
\section{\textcolor{Chapter }{Pcp\texttt{\symbol{45}}groups \texttt{\symbol{45}} groups of
pcp\texttt{\symbol{45}}elements}}\label{pcpgroup}
\logpage{[ 4, 3, 0 ]}
\hyperdef{L}{X7A4EF7C68151905A}{}
{
A \emph{pcp\texttt{\symbol{45}}group} is a group consisting of pcp\texttt{\symbol{45}}elements such that all
pcp\texttt{\symbol{45}}elements in the group share the same collector. Thus
the group $G$ defined by a polycyclic presentation and all its subgroups are
pcp\texttt{\symbol{45}}groups.
\subsection{\textcolor{Chapter }{PcpGroupByCollector}}
\logpage{[ 4, 3, 1 ]}\nobreak
\hyperdef{L}{X7C8FBCAB7F63FACB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpGroupByCollector({\mdseries\slshape coll})\index{PcpGroupByCollector@\texttt{PcpGroupByCollector}}
\label{PcpGroupByCollector}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpGroupByCollectorNC({\mdseries\slshape coll})\index{PcpGroupByCollectorNC@\texttt{PcpGroupByCollectorNC}}
\label{PcpGroupByCollectorNC}
}\hfill{\scriptsize (function)}}\\
returns a pcp\texttt{\symbol{45}}group build from the collector \mbox{\texttt{\mdseries\slshape coll}}.
The function calls \texttt{UpdatePolycyclicCollector} (\ref{UpdatePolycyclicCollector}) and checks the confluence (see \texttt{IsConfluent} (\ref{IsConfluent})) of the collector.
The non\texttt{\symbol{45}}check version bypasses these checks. }
\subsection{\textcolor{Chapter }{Group}}
\logpage{[ 4, 3, 2 ]}\nobreak
\hyperdef{L}{X7D7B075385435151}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Group({\mdseries\slshape gens, id})\index{Group@\texttt{Group}}
\label{Group}
}\hfill{\scriptsize (function)}}\\
returns the group generated by the pcp\texttt{\symbol{45}}elements \mbox{\texttt{\mdseries\slshape gens}} with identity \mbox{\texttt{\mdseries\slshape id}}. }
\subsection{\textcolor{Chapter }{Subgroup}}
\logpage{[ 4, 3, 3 ]}\nobreak
\hyperdef{L}{X7C82AA387A42DCA0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Subgroup({\mdseries\slshape G, gens})\index{Subgroup@\texttt{Subgroup}}
\label{Subgroup}
}\hfill{\scriptsize (function)}}\\
returns a subgroup of the pcp\texttt{\symbol{45}}group \mbox{\texttt{\mdseries\slshape G}} generated by the list \mbox{\texttt{\mdseries\slshape gens}} of pcp\texttt{\symbol{45}}elements from \mbox{\texttt{\mdseries\slshape G}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@ ftl := FromTheLeftCollector( 2 );;|
!gapprompt@gap>| !gapinput@ SetRelativeOrder( ftl, 1, 2 );|
!gapprompt@gap>| !gapinput@ SetConjugate( ftl, 2, 1, [2,-1] );|
!gapprompt@gap>| !gapinput@ UpdatePolycyclicCollector( ftl );|
!gapprompt@gap>| !gapinput@ G:= PcpGroupByCollectorNC( ftl );|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@Subgroup( G, GeneratorsOfGroup(G){[2]} );|
Pcp-group with orders [ 0 ]
\end{Verbatim}
}
}
}
\chapter{\textcolor{Chapter }{Basic methods and functions for pcp\texttt{\symbol{45}}groups}}\label{Basic methods and functions for pcp-groups}
\logpage{[ 5, 0, 0 ]}
\hyperdef{L}{X7B9B85AE7C9B13EE}{}
{
Pcp\texttt{\symbol{45}}groups are groups in the \textsf{GAP} sense and hence all generic \textsf{GAP} methods for groups can be applied for pcp\texttt{\symbol{45}}groups. However,
for a number of group theoretic questions \textsf{GAP} does not provide generic methods that can be applied to
pcp\texttt{\symbol{45}}groups. For some of these questions there are functions
provided in \textsf{Polycyclic}.
\section{\textcolor{Chapter }{Elementary methods for pcp\texttt{\symbol{45}}groups}}\label{methods}
\logpage{[ 5, 1, 0 ]}
\hyperdef{L}{X821360107E355B88}{}
{
In this chapter we describe some important basic functions which are available
for pcp\texttt{\symbol{45}}groups. A number of higher level functions are
outlined in later sections and chapters.
Let $U, V$ and $N$ be subgroups of a pcp\texttt{\symbol{45}}group.
\subsection{\textcolor{Chapter }{\texttt{\symbol{92}}=}}
\logpage{[ 5, 1, 1 ]}\nobreak
\hyperdef{L}{X806A4814806A4814}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{\texttt{\symbol{92}}=({\mdseries\slshape U, V})\index{\texttt{\symbol{92}}=@\texttt{\texttt{\symbol{92}}=}}
\label{bSlash=}
}\hfill{\scriptsize (method)}}\\
decides if \mbox{\texttt{\mdseries\slshape U}} and \mbox{\texttt{\mdseries\slshape V}} are equal as sets. }
\subsection{\textcolor{Chapter }{Size}}
\logpage{[ 5, 1, 2 ]}\nobreak
\hyperdef{L}{X858ADA3B7A684421}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Size({\mdseries\slshape U})\index{Size@\texttt{Size}}
\label{Size}
}\hfill{\scriptsize (method)}}\\
returns the size of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{Random}}
\logpage{[ 5, 1, 3 ]}\nobreak
\hyperdef{L}{X79730D657AB219DB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Random({\mdseries\slshape U})\index{Random@\texttt{Random}}
\label{Random}
}\hfill{\scriptsize (method)}}\\
returns a random element of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{Index}}
\logpage{[ 5, 1, 4 ]}\nobreak
\hyperdef{L}{X83A0356F839C696F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Index({\mdseries\slshape U, V})\index{Index@\texttt{Index}}
\label{Index}
}\hfill{\scriptsize (method)}}\\
returns the index of \mbox{\texttt{\mdseries\slshape V}} in \mbox{\texttt{\mdseries\slshape U}} if \mbox{\texttt{\mdseries\slshape V}} is a subgroup of \mbox{\texttt{\mdseries\slshape U}}. The function does not check if \mbox{\texttt{\mdseries\slshape V}} is a subgroup of \mbox{\texttt{\mdseries\slshape U}} and if it is not, the result is not meaningful. }
\subsection{\textcolor{Chapter }{\texttt{\symbol{92}}in}}
\logpage{[ 5, 1, 5 ]}\nobreak
\hyperdef{L}{X87BDB89B7AAFE8AD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{\texttt{\symbol{92}}in({\mdseries\slshape g, U})\index{\texttt{\symbol{92}}in@\texttt{\texttt{\symbol{92}}in}}
\label{bSlashin}
}\hfill{\scriptsize (method)}}\\
checks if \mbox{\texttt{\mdseries\slshape g}} is an element of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{Elements}}
\logpage{[ 5, 1, 6 ]}\nobreak
\hyperdef{L}{X79B130FC7906FB4C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Elements({\mdseries\slshape U})\index{Elements@\texttt{Elements}}
\label{Elements}
}\hfill{\scriptsize (method)}}\\
returns a list containing all elements of \mbox{\texttt{\mdseries\slshape U}} if \mbox{\texttt{\mdseries\slshape U}} is finite and it returns the list [fail] otherwise. }
\subsection{\textcolor{Chapter }{ClosureGroup}}
\logpage{[ 5, 1, 7 ]}\nobreak
\hyperdef{L}{X7D13FC1F8576FFD8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ClosureGroup({\mdseries\slshape U, V})\index{ClosureGroup@\texttt{ClosureGroup}}
\label{ClosureGroup}
}\hfill{\scriptsize (method)}}\\
returns the group generated by \mbox{\texttt{\mdseries\slshape U}} and \mbox{\texttt{\mdseries\slshape V}}. }
\subsection{\textcolor{Chapter }{NormalClosure}}
\logpage{[ 5, 1, 8 ]}\nobreak
\hyperdef{L}{X7BDEA0A98720D1BB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NormalClosure({\mdseries\slshape U, V})\index{NormalClosure@\texttt{NormalClosure}}
\label{NormalClosure}
}\hfill{\scriptsize (method)}}\\
returns the normal closure of \mbox{\texttt{\mdseries\slshape V}} under action of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{HirschLength}}
\logpage{[ 5, 1, 9 ]}\nobreak
\hyperdef{L}{X839B42AE7A1DD544}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{HirschLength({\mdseries\slshape U})\index{HirschLength@\texttt{HirschLength}}
\label{HirschLength}
}\hfill{\scriptsize (method)}}\\
returns the Hirsch length of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{CommutatorSubgroup}}
\logpage{[ 5, 1, 10 ]}\nobreak
\hyperdef{L}{X7A9A3D5578CE33A0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{CommutatorSubgroup({\mdseries\slshape U, V})\index{CommutatorSubgroup@\texttt{CommutatorSubgroup}}
\label{CommutatorSubgroup}
}\hfill{\scriptsize (method)}}\\
returns the group generated by all commutators $[u,v]$ with $u$ in \mbox{\texttt{\mdseries\slshape U}} and $v$ in \mbox{\texttt{\mdseries\slshape V}}. }
\subsection{\textcolor{Chapter }{PRump}}
\logpage{[ 5, 1, 11 ]}\nobreak
\hyperdef{L}{X796DA805853FAC90}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PRump({\mdseries\slshape U, p})\index{PRump@\texttt{PRump}}
\label{PRump}
}\hfill{\scriptsize (method)}}\\
returns the subgroup $U'U^p$ of \mbox{\texttt{\mdseries\slshape U}} where \mbox{\texttt{\mdseries\slshape p}} is a prime number. }
\subsection{\textcolor{Chapter }{SmallGeneratingSet}}
\logpage{[ 5, 1, 12 ]}\nobreak
\hyperdef{L}{X814DBABC878D5232}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SmallGeneratingSet({\mdseries\slshape U})\index{SmallGeneratingSet@\texttt{SmallGeneratingSet}}
\label{SmallGeneratingSet}
}\hfill{\scriptsize (method)}}\\
returns a small generating set for \mbox{\texttt{\mdseries\slshape U}}. }
}
\section{\textcolor{Chapter }{Elementary properties of pcp\texttt{\symbol{45}}groups}}\label{Elementary properties of pcp-groups}
\logpage{[ 5, 2, 0 ]}
\hyperdef{L}{X80E88168866D54F3}{}
{
\subsection{\textcolor{Chapter }{IsSubgroup}}
\logpage{[ 5, 2, 1 ]}\nobreak
\hyperdef{L}{X7839D8927E778334}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsSubgroup({\mdseries\slshape U, V})\index{IsSubgroup@\texttt{IsSubgroup}}
\label{IsSubgroup}
}\hfill{\scriptsize (function)}}\\
tests if \mbox{\texttt{\mdseries\slshape V}} is a subgroup of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{IsNormal}}
\logpage{[ 5, 2, 2 ]}\nobreak
\hyperdef{L}{X838186F9836F678C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsNormal({\mdseries\slshape U, V})\index{IsNormal@\texttt{IsNormal}}
\label{IsNormal}
}\hfill{\scriptsize (function)}}\\
tests if \mbox{\texttt{\mdseries\slshape V}} is normal in \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{IsNilpotentGroup}}
\logpage{[ 5, 2, 3 ]}\nobreak
\hyperdef{L}{X87D062608719F2CD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsNilpotentGroup({\mdseries\slshape U})\index{IsNilpotentGroup@\texttt{IsNilpotentGroup}}
\label{IsNilpotentGroup}
}\hfill{\scriptsize (method)}}\\
checks whether \mbox{\texttt{\mdseries\slshape U}} is nilpotent. }
\subsection{\textcolor{Chapter }{IsAbelian}}
\logpage{[ 5, 2, 4 ]}\nobreak
\hyperdef{L}{X7C12AA7479A6C103}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsAbelian({\mdseries\slshape U})\index{IsAbelian@\texttt{IsAbelian}}
\label{IsAbelian}
}\hfill{\scriptsize (method)}}\\
checks whether \mbox{\texttt{\mdseries\slshape U}} is abelian. }
\subsection{\textcolor{Chapter }{IsElementaryAbelian}}
\logpage{[ 5, 2, 5 ]}\nobreak
\hyperdef{L}{X813C952F80E775D4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsElementaryAbelian({\mdseries\slshape U})\index{IsElementaryAbelian@\texttt{IsElementaryAbelian}}
\label{IsElementaryAbelian}
}\hfill{\scriptsize (method)}}\\
checks whether \mbox{\texttt{\mdseries\slshape U}} is elementary abelian. }
\subsection{\textcolor{Chapter }{IsFreeAbelian}}
\logpage{[ 5, 2, 6 ]}\nobreak
\hyperdef{L}{X84FFC668832F9ED6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsFreeAbelian({\mdseries\slshape U})\index{IsFreeAbelian@\texttt{IsFreeAbelian}}
\label{IsFreeAbelian}
}\hfill{\scriptsize (property)}}\\
checks whether \mbox{\texttt{\mdseries\slshape U}} is free abelian. }
}
\section{\textcolor{Chapter }{Subgroups of pcp\texttt{\symbol{45}}groups}}\label{Subgroups of pcp-groups}
\logpage{[ 5, 3, 0 ]}
\hyperdef{L}{X85A7E26C7E14AFBA}{}
{
A subgroup of a pcp\texttt{\symbol{45}}group $G$ can be defined by a set of generators as described in Section \ref{pcpgroup}. However, many computations with a subgroup $U$ need an \emph{induced generating sequence} or \emph{igs} of $U$. An igs is a sequence of generators of $U$ whose list of exponent vectors form a matrix in upper triangular form. Note
that there may exist many igs of $U$. The first one calculated for $U$ is stored as an attribute.
An induced generating sequence of a subgroup of a pcp\texttt{\symbol{45}}group $G$ is a list of elements of $G$. An igs is called \emph{normed}, if each element in the list is normed. Moreover, it is \emph{canonical}, if the exponent vector matrix is in Hermite Normal Form. The following
functions can be used to compute induced generating sequence for a given
subgroup \mbox{\texttt{\mdseries\slshape U}} of \mbox{\texttt{\mdseries\slshape G}}.
\subsection{\textcolor{Chapter }{Igs (for a subgroup)}}
\logpage{[ 5, 3, 1 ]}\nobreak
\hyperdef{L}{X815F756286701BE0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Igs({\mdseries\slshape U})\index{Igs@\texttt{Igs}!for a subgroup}
\label{Igs:for a subgroup}
}\hfill{\scriptsize (attribute)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Igs({\mdseries\slshape gens})\index{Igs@\texttt{Igs}}
\label{Igs}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IgsParallel({\mdseries\slshape gens, gens2})\index{IgsParallel@\texttt{IgsParallel}}
\label{IgsParallel}
}\hfill{\scriptsize (function)}}\\
returns an induced generating sequence of the subgroup \mbox{\texttt{\mdseries\slshape U}} of a pcp\texttt{\symbol{45}}group. In the second form the subgroup is given
via a generating set \mbox{\texttt{\mdseries\slshape gens}}. The third form computes an igs for the subgroup generated by \mbox{\texttt{\mdseries\slshape gens}} carrying \mbox{\texttt{\mdseries\slshape gens2}} through as shadows. This means that each operation that is applied to the
first list is also applied to the second list. }
\subsection{\textcolor{Chapter }{Ngs (for a subgroup)}}
\logpage{[ 5, 3, 2 ]}\nobreak
\hyperdef{L}{X7F4D95C47F9652BA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Ngs({\mdseries\slshape U})\index{Ngs@\texttt{Ngs}!for a subgroup}
\label{Ngs:for a subgroup}
}\hfill{\scriptsize (attribute)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Ngs({\mdseries\slshape igs})\index{Ngs@\texttt{Ngs}}
\label{Ngs}
}\hfill{\scriptsize (function)}}\\
returns a normed induced generating sequence of the subgroup \mbox{\texttt{\mdseries\slshape U}} of a pcp\texttt{\symbol{45}}group. The second form takes an igs as input and
norms it. }
\subsection{\textcolor{Chapter }{Cgs (for a subgroup)}}
\logpage{[ 5, 3, 3 ]}\nobreak
\hyperdef{L}{X8077293A787D4571}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Cgs({\mdseries\slshape U})\index{Cgs@\texttt{Cgs}!for a subgroup}
\label{Cgs:for a subgroup}
}\hfill{\scriptsize (attribute)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Cgs({\mdseries\slshape igs})\index{Cgs@\texttt{Cgs}}
\label{Cgs}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{CgsParallel({\mdseries\slshape gens, gens2})\index{CgsParallel@\texttt{CgsParallel}}
\label{CgsParallel}
}\hfill{\scriptsize (function)}}\\
returns a canonical generating sequence of the subgroup \mbox{\texttt{\mdseries\slshape U}} of a pcp\texttt{\symbol{45}}group. In the second form the function takes an
igs as input and returns a canonical generating sequence. The third version
takes a generating set and computes a canonical generating sequence carrying \mbox{\texttt{\mdseries\slshape gens2}} through as shadows. This means that each operation that is applied to the
first list is also applied to the second list.
For a large number of methods for pcp\texttt{\symbol{45}}groups \mbox{\texttt{\mdseries\slshape U}} we will first of all determine an \mbox{\texttt{\mdseries\slshape igs}} for \mbox{\texttt{\mdseries\slshape U}}. Hence it might speed up computations, if a known \mbox{\texttt{\mdseries\slshape igs}} for a group \mbox{\texttt{\mdseries\slshape U}} is set \emph{a priori}. The following functions can be used for this purpose. }
\subsection{\textcolor{Chapter }{SubgroupByIgs}}
\logpage{[ 5, 3, 4 ]}\nobreak
\hyperdef{L}{X83B92A2679EAB1EB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SubgroupByIgs({\mdseries\slshape G, igs})\index{SubgroupByIgs@\texttt{SubgroupByIgs}}
\label{SubgroupByIgs}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SubgroupByIgs({\mdseries\slshape G, igs, gens})\index{SubgroupByIgs@\texttt{SubgroupByIgs}!with extra generators}
\label{SubgroupByIgs:with extra generators}
}\hfill{\scriptsize (function)}}\\
returns the subgroup of the pcp\texttt{\symbol{45}}group \mbox{\texttt{\mdseries\slshape G}} generated by the elements of the induced generating sequence \mbox{\texttt{\mdseries\slshape igs}}. Note that \mbox{\texttt{\mdseries\slshape igs}} must be an induced generating sequence of the subgroup generated by the
elements of the \mbox{\texttt{\mdseries\slshape igs}}. In the second form \mbox{\texttt{\mdseries\slshape igs}} is a igs for a subgroup and \mbox{\texttt{\mdseries\slshape gens}} are some generators. The function returns the subgroup generated by \mbox{\texttt{\mdseries\slshape igs}} and \mbox{\texttt{\mdseries\slshape gens}}. }
\subsection{\textcolor{Chapter }{AddToIgs}}
\logpage{[ 5, 3, 5 ]}\nobreak
\hyperdef{L}{X78107DE78728B26B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AddToIgs({\mdseries\slshape igs, gens})\index{AddToIgs@\texttt{AddToIgs}}
\label{AddToIgs}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AddToIgsParallel({\mdseries\slshape igs, gens, igs2, gens2})\index{AddToIgsParallel@\texttt{AddToIgsParallel}}
\label{AddToIgsParallel}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AddIgsToIgs({\mdseries\slshape igs, igs2})\index{AddIgsToIgs@\texttt{AddIgsToIgs}}
\label{AddIgsToIgs}
}\hfill{\scriptsize (function)}}\\
sifts the elements in the list $gens$ into $igs$. The second version has the same functionality and carries shadows. This
means that each operation that is applied to the first list and the element \mbox{\texttt{\mdseries\slshape gens}} is also applied to the second list and the element \mbox{\texttt{\mdseries\slshape gens2}}. The third version is available for efficiency reasons and assumes that the
second list \mbox{\texttt{\mdseries\slshape igs2}} is not only a generating set, but an igs. }
}
\section{\textcolor{Chapter }{Polycyclic presentation sequences for subfactors}}\label{pcps}
\logpage{[ 5, 4, 0 ]}
\hyperdef{L}{X803D62BC86EF07D0}{}
{
A subfactor of a pcp\texttt{\symbol{45}}group $G$ is again a polycyclic group for which a polycyclic presentation can be
computed. However, to compute a polycyclic presentation for a given subfactor
can be time\texttt{\symbol{45}}consuming. Hence we introduce \emph{polycyclic presentation sequences} or \emph{Pcp} to compute more efficiently with subfactors. (Note that a subgroup is also a
subfactor and thus can be handled by a pcp)
A pcp for a pcp\texttt{\symbol{45}}group $U$ or a subfactor $U / N$ can be created with one of the following functions.
\subsection{\textcolor{Chapter }{Pcp}}
\logpage{[ 5, 4, 1 ]}\nobreak
\hyperdef{L}{X7DD931697DD93169}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Pcp({\mdseries\slshape U[, flag]})\index{Pcp@\texttt{Pcp}}
\label{Pcp}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Pcp({\mdseries\slshape U, N[, flag]})\index{Pcp@\texttt{Pcp}!for a factor}
\label{Pcp:for a factor}
}\hfill{\scriptsize (function)}}\\
returns a polycyclic presentation sequence for the subgroup \mbox{\texttt{\mdseries\slshape U}} or the quotient group \mbox{\texttt{\mdseries\slshape U}} modulo \mbox{\texttt{\mdseries\slshape N}}. If the parameter \mbox{\texttt{\mdseries\slshape flag}} is present and equals the string ``snf'', the function can only be applied to an abelian subgroup \mbox{\texttt{\mdseries\slshape U}} or abelian subfactor \mbox{\texttt{\mdseries\slshape U}}/\mbox{\texttt{\mdseries\slshape N}}. The pcp returned will correspond to a decomposition of the abelian group
into a direct product of cyclic groups. }
A pcp is a component object which behaves similar to a list representing an
igs of the subfactor in question. The basic functions to obtain the stored
values of this component object are as follows. Let $pcp$ be a pcp for a subfactor $U/N$ of the defining pcp\texttt{\symbol{45}}group $G$.
\subsection{\textcolor{Chapter }{GeneratorsOfPcp}}
\logpage{[ 5, 4, 2 ]}\nobreak
\hyperdef{L}{X821FF77086E38B3A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GeneratorsOfPcp({\mdseries\slshape pcp})\index{GeneratorsOfPcp@\texttt{GeneratorsOfPcp}}
\label{GeneratorsOfPcp}
}\hfill{\scriptsize (function)}}\\
this returns a list of elements of $U$ corresponding to an igs of $U/N$. }
\subsection{\textcolor{Chapter }{\texttt{\symbol{92}}[\texttt{\symbol{92}}]}}
\logpage{[ 5, 4, 3 ]}\nobreak
\hyperdef{L}{X8297BBCD79642BE6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{\texttt{\symbol{92}}[\texttt{\symbol{92}}]({\mdseries\slshape pcp, i})\index{\texttt{\symbol{92}}[\texttt{\symbol{92}}]@\texttt{\texttt{\symbol{92}}[\texttt{\symbol{92}}]}}
\label{bSlash[bSlash]}
}\hfill{\scriptsize (method)}}\\
returns the \mbox{\texttt{\mdseries\slshape i}}\texttt{\symbol{45}}th element of \mbox{\texttt{\mdseries\slshape pcp}}. }
\subsection{\textcolor{Chapter }{Length}}
\logpage{[ 5, 4, 4 ]}\nobreak
\hyperdef{L}{X780769238600AFD1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Length({\mdseries\slshape pcp})\index{Length@\texttt{Length}}
\label{Length}
}\hfill{\scriptsize (method)}}\\
returns the number of generators in \mbox{\texttt{\mdseries\slshape pcp}}. }
\subsection{\textcolor{Chapter }{RelativeOrdersOfPcp}}
\logpage{[ 5, 4, 5 ]}\nobreak
\hyperdef{L}{X7ABCA7F2790E1673}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RelativeOrdersOfPcp({\mdseries\slshape pcp})\index{RelativeOrdersOfPcp@\texttt{RelativeOrdersOfPcp}}
\label{RelativeOrdersOfPcp}
}\hfill{\scriptsize (function)}}\\
the relative orders of the igs in \mbox{\texttt{\mdseries\slshape U/N}}. }
\subsection{\textcolor{Chapter }{DenominatorOfPcp}}
\logpage{[ 5, 4, 6 ]}\nobreak
\hyperdef{L}{X7D16C299825887AA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{DenominatorOfPcp({\mdseries\slshape pcp})\index{DenominatorOfPcp@\texttt{DenominatorOfPcp}}
\label{DenominatorOfPcp}
}\hfill{\scriptsize (function)}}\\
returns an igs of \mbox{\texttt{\mdseries\slshape N}}. }
\subsection{\textcolor{Chapter }{NumeratorOfPcp}}
\logpage{[ 5, 4, 7 ]}\nobreak
\hyperdef{L}{X803AED1A84FCBEE8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NumeratorOfPcp({\mdseries\slshape pcp})\index{NumeratorOfPcp@\texttt{NumeratorOfPcp}}
\label{NumeratorOfPcp}
}\hfill{\scriptsize (function)}}\\
returns an igs of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{GroupOfPcp}}
\logpage{[ 5, 4, 8 ]}\nobreak
\hyperdef{L}{X80BCCF0B81344933}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GroupOfPcp({\mdseries\slshape pcp})\index{GroupOfPcp@\texttt{GroupOfPcp}}
\label{GroupOfPcp}
}\hfill{\scriptsize (function)}}\\
returns \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{OneOfPcp}}
\logpage{[ 5, 4, 9 ]}\nobreak
\hyperdef{L}{X87F0BA5F7BA0F4B4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OneOfPcp({\mdseries\slshape pcp})\index{OneOfPcp@\texttt{OneOfPcp}}
\label{OneOfPcp}
}\hfill{\scriptsize (function)}}\\
returns the identity element of \mbox{\texttt{\mdseries\slshape G}}. }
The main feature of a pcp are the possibility to compute exponent vectors
without having to determine an explicit pcp\texttt{\symbol{45}}group
corresponding to the subfactor that is represented by the pcp. Nonetheless, it
is possible to determine this subfactor.
\subsection{\textcolor{Chapter }{ExponentsByPcp}}
\logpage{[ 5, 4, 10 ]}\nobreak
\hyperdef{L}{X7A8C8BBC81581E09}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ExponentsByPcp({\mdseries\slshape pcp, g})\index{ExponentsByPcp@\texttt{ExponentsByPcp}}
\label{ExponentsByPcp}
}\hfill{\scriptsize (function)}}\\
returns the exponent vector of \mbox{\texttt{\mdseries\slshape g}} with respect to the generators of \mbox{\texttt{\mdseries\slshape pcp}}. This is the exponent vector of \mbox{\texttt{\mdseries\slshape g}}$N$ with respect to the igs of \mbox{\texttt{\mdseries\slshape U/N}}. }
\subsection{\textcolor{Chapter }{PcpGroupByPcp}}
\logpage{[ 5, 4, 11 ]}\nobreak
\hyperdef{L}{X87D75F7F86FEF203}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpGroupByPcp({\mdseries\slshape pcp})\index{PcpGroupByPcp@\texttt{PcpGroupByPcp}}
\label{PcpGroupByPcp}
}\hfill{\scriptsize (function)}}\\
let \mbox{\texttt{\mdseries\slshape pcp}} be a Pcp of a subgroup or a factor group of a pcp\texttt{\symbol{45}}group.
This function computes a new pcp\texttt{\symbol{45}}group whose defining
generators correspond to the generators in \mbox{\texttt{\mdseries\slshape pcp}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@ G := DihedralPcpGroup(0);|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@ pcp := Pcp(G);|
Pcp [ g1, g2 ] with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@ pcp[1];|
g1
!gapprompt@gap>| !gapinput@ Length(pcp);|
2
!gapprompt@gap>| !gapinput@ RelativeOrdersOfPcp(pcp);|
[ 2, 0 ]
!gapprompt@gap>| !gapinput@ DenominatorOfPcp(pcp);|
[ ]
!gapprompt@gap>| !gapinput@ NumeratorOfPcp(pcp);|
[ g1, g2 ]
!gapprompt@gap>| !gapinput@ GroupOfPcp(pcp);|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@OneOfPcp(pcp);|
identity
\end{Verbatim}
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups(5);|
Pcp-group with orders [ 2, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@D := DerivedSubgroup( G );|
Pcp-group with orders [ 0, 0, 0 ]
!gapprompt@gap>| !gapinput@ GeneratorsOfGroup( G );|
[ g1, g2, g3, g4 ]
!gapprompt@gap>| !gapinput@ GeneratorsOfGroup( D );|
[ g2^-2, g3^-2, g4^2 ]
# an ordinary pcp for G / D
!gapprompt@gap>| !gapinput@pcp1 := Pcp( G, D );|
Pcp [ g1, g2, g3, g4 ] with orders [ 2, 2, 2, 2 ]
# a pcp for G/D in independent generators
!gapprompt@gap>| !gapinput@ pcp2 := Pcp( G, D, "snf" );|
Pcp [ g2, g3, g1 ] with orders [ 2, 2, 4 ]
!gapprompt@gap>| !gapinput@ g := Random( G );|
g1*g2^-4*g3*g4^2
# compute the exponent vector of g in G/D with respect to pcp1
!gapprompt@gap>| !gapinput@ExponentsByPcp( pcp1, g );|
[ 1, 0, 1, 0 ]
# compute the exponent vector of g in G/D with respect to pcp2
!gapprompt@gap>| !gapinput@ ExponentsByPcp( pcp2, g );|
[ 0, 1, 1 ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Factor groups of pcp\texttt{\symbol{45}}groups}}\label{Factor groups of pcp-groups}
\logpage{[ 5, 5, 0 ]}
\hyperdef{L}{X845D29B478CA7656}{}
{
Pcp's for subfactors of pcp\texttt{\symbol{45}}groups have already been
described above. These are usually used within algorithms to compute with
pcp\texttt{\symbol{45}}groups. However, it is also possible to explicitly
construct factor groups and their corresponding natural homomorphisms.
\subsection{\textcolor{Chapter }{NaturalHomomorphismByNormalSubgroup}}
\logpage{[ 5, 5, 1 ]}\nobreak
\hyperdef{L}{X80FC390C7F38A13F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NaturalHomomorphismByNormalSubgroup({\mdseries\slshape G, N})\index{NaturalHomomorphismByNormalSubgroup@\texttt{NaturalHomomorphismByNormalSubgroup}}
\label{NaturalHomomorphismByNormalSubgroup}
}\hfill{\scriptsize (method)}}\\
returns the natural homomorphism $G \to G/N$. Its image is the factor group $G/N$. }
\subsection{\textcolor{Chapter }{\texttt{\symbol{92}}/}}
\logpage{[ 5, 5, 2 ]}\nobreak
\hyperdef{L}{X7F51DF007F51DF00}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{\texttt{\symbol{92}}/({\mdseries\slshape G, N})\index{\texttt{\symbol{92}}/@\texttt{\texttt{\symbol{92}}/}}
\label{bSlash/}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FactorGroup({\mdseries\slshape G, N})\index{FactorGroup@\texttt{FactorGroup}}
\label{FactorGroup}
}\hfill{\scriptsize (method)}}\\
returns the desired factor as pcp\texttt{\symbol{45}}group without giving the
explicit homomorphism. This function is just a wrapper for \texttt{PcpGroupByPcp( Pcp( G, N ) )}. }
}
\section{\textcolor{Chapter }{Homomorphisms for pcp\texttt{\symbol{45}}groups}}\label{Homomorphisms for pcp-groups}
\logpage{[ 5, 6, 0 ]}
\hyperdef{L}{X82E643F178E765EA}{}
{
\textsf{Polycyclic} provides code for defining group homomorphisms by generators and images where
either the source or the range or both are pcp groups. All methods provided by
GAP for such group homomorphisms are supported, in particular the following:
\subsection{\textcolor{Chapter }{GroupHomomorphismByImages}}
\logpage{[ 5, 6, 1 ]}\nobreak
\hyperdef{L}{X7F348F497C813BE0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{GroupHomomorphismByImages({\mdseries\slshape G, H, gens, imgs})\index{GroupHomomorphismByImages@\texttt{GroupHomomorphismByImages}}
\label{GroupHomomorphismByImages}
}\hfill{\scriptsize (function)}}\\
returns the homomorphism from the (pcp\texttt{\symbol{45}}) group \mbox{\texttt{\mdseries\slshape G}} to the pcp\texttt{\symbol{45}}group \mbox{\texttt{\mdseries\slshape H}} mapping the generators of \mbox{\texttt{\mdseries\slshape G}} in the list \mbox{\texttt{\mdseries\slshape gens}} to the corresponding images in the list \mbox{\texttt{\mdseries\slshape imgs}} of elements of \mbox{\texttt{\mdseries\slshape H}}. }
\subsection{\textcolor{Chapter }{Kernel}}
\logpage{[ 5, 6, 2 ]}\nobreak
\hyperdef{L}{X7DCD99628504B810}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Kernel({\mdseries\slshape hom})\index{Kernel@\texttt{Kernel}}
\label{Kernel}
}\hfill{\scriptsize (function)}}\\
returns the kernel of the homomorphism \mbox{\texttt{\mdseries\slshape hom}} from a pcp\texttt{\symbol{45}}group to a pcp\texttt{\symbol{45}}group. }
\subsection{\textcolor{Chapter }{Image (for a homomorphism)}}
\logpage{[ 5, 6, 3 ]}\nobreak
\hyperdef{L}{X847322667E6166C8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Image({\mdseries\slshape hom})\index{Image@\texttt{Image}!for a homomorphism}
\label{Image:for a homomorphism}
}\hfill{\scriptsize (operation)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Image({\mdseries\slshape hom, U})\index{Image@\texttt{Image}!for a homomorphism and a subgroup}
\label{Image:for a homomorphism and a subgroup}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Image({\mdseries\slshape hom, g})\index{Image@\texttt{Image}!for a homomorphism and an element}
\label{Image:for a homomorphism and an element}
}\hfill{\scriptsize (function)}}\\
returns the image of the whole group, of \mbox{\texttt{\mdseries\slshape U}} and of \mbox{\texttt{\mdseries\slshape g}}, respectively, under the homomorphism \mbox{\texttt{\mdseries\slshape hom}}. }
\subsection{\textcolor{Chapter }{PreImage}}
\logpage{[ 5, 6, 4 ]}\nobreak
\hyperdef{L}{X836FAEAC78B55BF4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PreImage({\mdseries\slshape hom, U})\index{PreImage@\texttt{PreImage}}
\label{PreImage}
}\hfill{\scriptsize (function)}}\\
returns the complete preimage of the subgroup \mbox{\texttt{\mdseries\slshape U}} under the homomorphism \mbox{\texttt{\mdseries\slshape hom}}. If the domain of \mbox{\texttt{\mdseries\slshape hom}} is not a pcp\texttt{\symbol{45}}group, then this function only works properly
if \mbox{\texttt{\mdseries\slshape hom}} is injective. }
\subsection{\textcolor{Chapter }{PreImagesRepresentative}}
\logpage{[ 5, 6, 5 ]}\nobreak
\hyperdef{L}{X7AE24A1586B7DE79}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PreImagesRepresentative({\mdseries\slshape hom, g})\index{PreImagesRepresentative@\texttt{PreImagesRepresentative}}
\label{PreImagesRepresentative}
}\hfill{\scriptsize (method)}}\\
returns a preimage of the element \mbox{\texttt{\mdseries\slshape g}} under the homomorphism \mbox{\texttt{\mdseries\slshape hom}}. }
\subsection{\textcolor{Chapter }{IsInjective}}
\logpage{[ 5, 6, 6 ]}\nobreak
\hyperdef{L}{X7F065FD7822C0A12}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsInjective({\mdseries\slshape hom})\index{IsInjective@\texttt{IsInjective}}
\label{IsInjective}
}\hfill{\scriptsize (method)}}\\
checks if the homomorphism \mbox{\texttt{\mdseries\slshape hom}} is injective. }
}
\section{\textcolor{Chapter }{Changing the defining pc\texttt{\symbol{45}}presentation}}\label{Changing the defining pc-presentation}
\logpage{[ 5, 7, 0 ]}
\hyperdef{L}{X7C873F807D4F3A3C}{}
{
\subsection{\textcolor{Chapter }{RefinedPcpGroup}}
\logpage{[ 5, 7, 1 ]}\nobreak
\hyperdef{L}{X80E9B60E853B2E05}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RefinedPcpGroup({\mdseries\slshape G})\index{RefinedPcpGroup@\texttt{RefinedPcpGroup}}
\label{RefinedPcpGroup}
}\hfill{\scriptsize (function)}}\\
returns a new pcp\texttt{\symbol{45}}group isomorphic to \mbox{\texttt{\mdseries\slshape G}} whose defining polycyclic presentation is refined; that is, the corresponding
polycyclic series has prime or infinite factors only. If $H$ is the new group, then $H!.bijection$ is the isomorphism $G \to H$. }
\subsection{\textcolor{Chapter }{PcpGroupBySeries}}
\logpage{[ 5, 7, 2 ]}\nobreak
\hyperdef{L}{X7F88F5548329E279}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpGroupBySeries({\mdseries\slshape ser[, flag]})\index{PcpGroupBySeries@\texttt{PcpGroupBySeries}}
\label{PcpGroupBySeries}
}\hfill{\scriptsize (function)}}\\
returns a new pcp\texttt{\symbol{45}}group isomorphic to the first subgroup $G$ of the given series \mbox{\texttt{\mdseries\slshape ser}} such that its defining pcp refines the given series. The series must be
subnormal and $H!.bijection$ is the isomorphism $G \to H$. If the parameter \mbox{\texttt{\mdseries\slshape flag}} is present and equals the string ``snf'', the series must have abelian factors. The pcp of the group returned
corresponds to a decomposition of each abelian factor into a direct product of
cyclic groups.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup(0);|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@ U := Subgroup( G, [Pcp(G)[2]^1440]);|
Pcp-group with orders [ 0 ]
!gapprompt@gap>| !gapinput@ F := G/U;|
Pcp-group with orders [ 2, 1440 ]
!gapprompt@gap>| !gapinput@RefinedPcpGroup(F);|
Pcp-group with orders [ 2, 2, 2, 2, 2, 2, 3, 3, 5 ]
!gapprompt@gap>| !gapinput@ser := [G, U, TrivialSubgroup(G)];|
[ Pcp-group with orders [ 2, 0 ],
Pcp-group with orders [ 0 ],
Pcp-group with orders [ ] ]
!gapprompt@gap>| !gapinput@ PcpGroupBySeries(ser);|
Pcp-group with orders [ 2, 1440, 0 ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Printing a pc\texttt{\symbol{45}}presentation}}\label{Printing a pc-presentation}
\logpage{[ 5, 8, 0 ]}
\hyperdef{L}{X85E681027AF19B1E}{}
{
By default, a pcp\texttt{\symbol{45}}group is printed using its relative
orders only. The following methods can be used to view the pcp presentation of
the group.
\subsection{\textcolor{Chapter }{PrintPcpPresentation (for a group)}}
\logpage{[ 5, 8, 1 ]}\nobreak
\hyperdef{L}{X79D247127FD57FC8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PrintPcpPresentation({\mdseries\slshape G[, flag]})\index{PrintPcpPresentation@\texttt{PrintPcpPresentation}!for a group}
\label{PrintPcpPresentation:for a group}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PrintPcpPresentation({\mdseries\slshape pcp[, flag]})\index{PrintPcpPresentation@\texttt{PrintPcpPresentation}!for a pcp}
\label{PrintPcpPresentation:for a pcp}
}\hfill{\scriptsize (function)}}\\
prints the pcp presentation defined by the igs of \mbox{\texttt{\mdseries\slshape G}} or the pcp \mbox{\texttt{\mdseries\slshape pcp}}. By default, the trivial conjugator relations are omitted from this
presentation to shorten notation. Also, the relations obtained from
conjugating with inverse generators are included only if the conjugating
generator has infinite order. If this generator has finite order, then the
conjugation relation is a consequence of the remaining relations. If the
parameter \mbox{\texttt{\mdseries\slshape flag}} is present and equals the string ``all'', all conjugate relations are printed, including the trivial conjugate
relations as well as those involving conjugation with inverses. }
}
\section{\textcolor{Chapter }{Converting to and from a presentation}}\label{Converting to and from a presentation}
\logpage{[ 5, 9, 0 ]}
\hyperdef{L}{X826ACBBB7A977206}{}
{
\subsection{\textcolor{Chapter }{IsomorphismPcpGroup}}
\logpage{[ 5, 9, 1 ]}\nobreak
\hyperdef{L}{X8771540F7A235763}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsomorphismPcpGroup({\mdseries\slshape G})\index{IsomorphismPcpGroup@\texttt{IsomorphismPcpGroup}}
\label{IsomorphismPcpGroup}
}\hfill{\scriptsize (attribute)}}\\
returns an isomorphism from \mbox{\texttt{\mdseries\slshape G}} onto a pcp\texttt{\symbol{45}}group \mbox{\texttt{\mdseries\slshape H}}. There are various methods installed for this operation and some of these
methods are part of the \textsf{Polycyclic} package, while others may be part of other packages.
For example, \textsf{Polycyclic} contains methods for this function in the case that \mbox{\texttt{\mdseries\slshape G}} is a finite pc\texttt{\symbol{45}}group or a finite solvable permutation
group.
Other examples for methods for IsomorphismPcpGroup are the methods for the
case that \mbox{\texttt{\mdseries\slshape G}} is a crystallographic group (see \textsf{Cryst}) or the case that \mbox{\texttt{\mdseries\slshape G}} is an almost crystallographic group (see \textsf{AClib}). A method for the case that \mbox{\texttt{\mdseries\slshape G}} is a rational polycyclic matrix group is included in the \textsf{Polenta} package. }
\subsection{\textcolor{Chapter }{IsomorphismPcpGroupFromFpGroupWithPcPres}}
\logpage{[ 5, 9, 2 ]}\nobreak
\hyperdef{L}{X7F5EBF1C831B4BA9}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsomorphismPcpGroupFromFpGroupWithPcPres({\mdseries\slshape G})\index{IsomorphismPcpGroupFromFpGroupWithPcPres@\texttt{Isomorphism}\-\texttt{Pcp}\-\texttt{Group}\-\texttt{From}\-\texttt{Fp}\-\texttt{Group}\-\texttt{With}\-\texttt{Pc}\-\texttt{Pres}}
\label{IsomorphismPcpGroupFromFpGroupWithPcPres}
}\hfill{\scriptsize (function)}}\\
This function can convert a finitely presented group with a polycyclic
presentation into a pcp group. }
\subsection{\textcolor{Chapter }{IsomorphismPcGroup}}
\logpage{[ 5, 9, 3 ]}\nobreak
\hyperdef{L}{X873CEB137BA1CD6E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsomorphismPcGroup({\mdseries\slshape G})\index{IsomorphismPcGroup@\texttt{IsomorphismPcGroup}}
\label{IsomorphismPcGroup}
}\hfill{\scriptsize (method)}}\\
pc\texttt{\symbol{45}}groups are a representation for finite polycyclic
groups. This function can convert finite pcp\texttt{\symbol{45}}groups to
pc\texttt{\symbol{45}}groups. }
\subsection{\textcolor{Chapter }{IsomorphismFpGroup}}
\logpage{[ 5, 9, 4 ]}\nobreak
\hyperdef{L}{X7F28268F850F454E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsomorphismFpGroup({\mdseries\slshape G})\index{IsomorphismFpGroup@\texttt{IsomorphismFpGroup}}
\label{IsomorphismFpGroup}
}\hfill{\scriptsize (method)}}\\
This function can convert pcp\texttt{\symbol{45}}groups to a finitely
presented group. }
}
}
\chapter{\textcolor{Chapter }{Libraries and examples of pcp\texttt{\symbol{45}}groups}}\label{Libraries and examples of pcp-groups}
\logpage{[ 6, 0, 0 ]}
\hyperdef{L}{X78CEF1F27ED8D7BB}{}
{
\section{\textcolor{Chapter }{Libraries of various types of polycyclic groups}}\label{Libraries of various types of polycyclic groups}
\logpage{[ 6, 1, 0 ]}
\hyperdef{L}{X84A48FAB83934263}{}
{
There are the following generic pcp\texttt{\symbol{45}}groups available.
\subsection{\textcolor{Chapter }{AbelianPcpGroup}}
\logpage{[ 6, 1, 1 ]}\nobreak
\hyperdef{L}{X7AEDE1BA82014B86}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AbelianPcpGroup({\mdseries\slshape n[, rels]})\index{AbelianPcpGroup@\texttt{AbelianPcpGroup}}
\label{AbelianPcpGroup}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AbelianPcpGroup({\mdseries\slshape rels})\index{AbelianPcpGroup@\texttt{AbelianPcpGroup}!rels only}
\label{AbelianPcpGroup:rels only}
}\hfill{\scriptsize (function)}}\\
constructs the abelian group on \mbox{\texttt{\mdseries\slshape n}} generators such that generator $i$ has order $rels[i]$. If this order is infinite, then $rels[i]$ should be either unbound or 0 or infinity. If \mbox{\texttt{\mdseries\slshape n}} is not provided then the length of \mbox{\texttt{\mdseries\slshape rels}} is used. If \mbox{\texttt{\mdseries\slshape rels}} is omitted then all generators will have infinite order. }
\subsection{\textcolor{Chapter }{DihedralPcpGroup}}
\logpage{[ 6, 1, 2 ]}\nobreak
\hyperdef{L}{X7ACF57737D0F12DB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{DihedralPcpGroup({\mdseries\slshape n})\index{DihedralPcpGroup@\texttt{DihedralPcpGroup}}
\label{DihedralPcpGroup}
}\hfill{\scriptsize (function)}}\\
constructs the dihedral group of order \mbox{\texttt{\mdseries\slshape n}}. If \mbox{\texttt{\mdseries\slshape n}} is an odd integer, then 'fail' is returned. If \mbox{\texttt{\mdseries\slshape n}} is zero or not an integer, then the infinite dihedral group is returned. }
\subsection{\textcolor{Chapter }{UnitriangularPcpGroup}}
\logpage{[ 6, 1, 3 ]}\nobreak
\hyperdef{L}{X864CEDAB7911CC79}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{UnitriangularPcpGroup({\mdseries\slshape n, c})\index{UnitriangularPcpGroup@\texttt{UnitriangularPcpGroup}}
\label{UnitriangularPcpGroup}
}\hfill{\scriptsize (function)}}\\
returns a pcp\texttt{\symbol{45}}group isomorphic to the group of upper
triangular in $GL(n, R)$ where $R = {\ensuremath{\mathbb Z}}$ if $c = 0$ and $R = \mathbb{F}_p$ if $c = p$. The natural unitriangular matrix representation of the returned
pcp\texttt{\symbol{45}}group $G$ can be obtained as $G!.isomorphism$. }
\subsection{\textcolor{Chapter }{SubgroupUnitriangularPcpGroup}}
\logpage{[ 6, 1, 4 ]}\nobreak
\hyperdef{L}{X812E35B17AADBCD5}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SubgroupUnitriangularPcpGroup({\mdseries\slshape mats})\index{SubgroupUnitriangularPcpGroup@\texttt{SubgroupUnitriangularPcpGroup}}
\label{SubgroupUnitriangularPcpGroup}
}\hfill{\scriptsize (function)}}\\
\mbox{\texttt{\mdseries\slshape mats}} should be a list of upper unitriangular $n \times n$ matrices over ${\ensuremath{\mathbb Z}}$ or over $\mathbb{F}_p$. This function returns the subgroup of the corresponding
'UnitriangularPcpGroup' generated by the matrices in \mbox{\texttt{\mdseries\slshape mats}}. }
\subsection{\textcolor{Chapter }{InfiniteMetacyclicPcpGroup}}
\logpage{[ 6, 1, 5 ]}\nobreak
\hyperdef{L}{X7A80F7F27FDA6810}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{InfiniteMetacyclicPcpGroup({\mdseries\slshape n, m, r})\index{InfiniteMetacyclicPcpGroup@\texttt{InfiniteMetacyclicPcpGroup}}
\label{InfiniteMetacyclicPcpGroup}
}\hfill{\scriptsize (function)}}\\
Infinite metacyclic groups are classified in \cite{B-K00}. Every infinite metacyclic group $G$ is isomorphic to a finitely presented group $G(m,n,r)$ with two generators $a$ and $b$ and relations of the form $a^m = b^n = 1$ and $[a,b] = a^{1-r}$, where (differing from the conventions used by GAP) we have $[a,b] = a b a^-1 b^-1$, and $m,n,r$ are three non\texttt{\symbol{45}}negative integers with $mn=0$ and $r$ relatively prime to $m$. If $r \equiv -1$ mod $m$ then $n$ is even, and if $r \equiv 1$ mod $m$ then $m=0$. Also $m$ and $n$ must not be $1$.
Moreover, $G(m,n,r)\cong G(m',n',s)$ if and only if $m=m'$, $n=n'$, and either $r \equiv s$ or $r \equiv s^{-1}$ mod $m$.
This function returns the metacyclic group with parameters \mbox{\texttt{\mdseries\slshape n}}, \mbox{\texttt{\mdseries\slshape m}} and \mbox{\texttt{\mdseries\slshape r}} as a pcp\texttt{\symbol{45}}group with the pc\texttt{\symbol{45}}presentation $\langle x,y | x^n, y^m, y^x = y^r\rangle$. This presentation is easily transformed into the one above via the mapping $x \mapsto b^{-1}, y \mapsto a$. }
\subsection{\textcolor{Chapter }{HeisenbergPcpGroup}}
\logpage{[ 6, 1, 6 ]}\nobreak
\hyperdef{L}{X81BEC875827D1CC2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{HeisenbergPcpGroup({\mdseries\slshape n})\index{HeisenbergPcpGroup@\texttt{HeisenbergPcpGroup}}
\label{HeisenbergPcpGroup}
}\hfill{\scriptsize (function)}}\\
returns the Heisenberg group on $2\mbox{\texttt{\mdseries\slshape n}}+1$ generators as pcp\texttt{\symbol{45}}group. This gives a group of Hirsch
length $2\mbox{\texttt{\mdseries\slshape n}}+1$. }
\subsection{\textcolor{Chapter }{MaximalOrderByUnitsPcpGroup}}
\logpage{[ 6, 1, 7 ]}\nobreak
\hyperdef{L}{X87F9B9C9786430D7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{MaximalOrderByUnitsPcpGroup({\mdseries\slshape f})\index{MaximalOrderByUnitsPcpGroup@\texttt{MaximalOrderByUnitsPcpGroup}}
\label{MaximalOrderByUnitsPcpGroup}
}\hfill{\scriptsize (function)}}\\
takes as input a normed, irreducible polynomial over the integers. Thus \mbox{\texttt{\mdseries\slshape f}} defines a field extension \mbox{\texttt{\mdseries\slshape F}} over the rationals. This function returns the split extension of the maximal
order \mbox{\texttt{\mdseries\slshape O}} of \mbox{\texttt{\mdseries\slshape F}} by the unit group \mbox{\texttt{\mdseries\slshape U}} of \mbox{\texttt{\mdseries\slshape O}}, where \mbox{\texttt{\mdseries\slshape U}} acts by right multiplication on \mbox{\texttt{\mdseries\slshape O}}. }
\subsection{\textcolor{Chapter }{BurdeGrunewaldPcpGroup}}
\logpage{[ 6, 1, 8 ]}\nobreak
\hyperdef{L}{X852283A77A2C93DD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{BurdeGrunewaldPcpGroup({\mdseries\slshape s, t})\index{BurdeGrunewaldPcpGroup@\texttt{BurdeGrunewaldPcpGroup}}
\label{BurdeGrunewaldPcpGroup}
}\hfill{\scriptsize (function)}}\\
returns a nilpotent group of Hirsch length 11 which has been constructed by
Burde und Grunewald. If \mbox{\texttt{\mdseries\slshape s}} is not 0, then this group has no faithful 12\texttt{\symbol{45}}dimensional
linear representation. }
}
\section{\textcolor{Chapter }{Some assorted example groups}}\label{Some asorted example groups}
\logpage{[ 6, 2, 0 ]}
\hyperdef{L}{X806FBA4A7CB8FB71}{}
{
The functions in this section provide some more example groups to play with.
They come with no further description and their investigation is left to the
interested user.
\subsection{\textcolor{Chapter }{ExampleOfMetabelianPcpGroup}}
\logpage{[ 6, 2, 1 ]}\nobreak
\hyperdef{L}{X86293081865CDFC3}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ExampleOfMetabelianPcpGroup({\mdseries\slshape a, k})\index{ExampleOfMetabelianPcpGroup@\texttt{ExampleOfMetabelianPcpGroup}}
\label{ExampleOfMetabelianPcpGroup}
}\hfill{\scriptsize (function)}}\\
returns an example of a metabelian group. The input parameters must be two
positive integers greater than 1. }
\subsection{\textcolor{Chapter }{ExamplesOfSomePcpGroups}}
\logpage{[ 6, 2, 2 ]}\nobreak
\hyperdef{L}{X83A74A6E7E232FD6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ExamplesOfSomePcpGroups({\mdseries\slshape n})\index{ExamplesOfSomePcpGroups@\texttt{ExamplesOfSomePcpGroups}}
\label{ExamplesOfSomePcpGroups}
}\hfill{\scriptsize (function)}}\\
this function takes values \mbox{\texttt{\mdseries\slshape n}} in 1 up to 16 and returns for each input an example of a
pcp\texttt{\symbol{45}}group. The groups in this example list have been used
as test groups for the functions in this package. }
}
}
\chapter{\textcolor{Chapter }{Higher level methods for pcp\texttt{\symbol{45}}groups}}\label{Higher level methods for pcp-groups}
\logpage{[ 7, 0, 0 ]}
\hyperdef{L}{X85BB6FE078679DAF}{}
{
This is a description of some higher level functions of the \textsf{Polycyclic} package of GAP 4. Throughout this chapter we let \mbox{\texttt{\mdseries\slshape G}} be a pc\texttt{\symbol{45}}presented group and we consider algorithms for
subgroups \mbox{\texttt{\mdseries\slshape U}} and \mbox{\texttt{\mdseries\slshape V}} of \mbox{\texttt{\mdseries\slshape G}}. For background and a description of the underlying algorithms we refer to \cite{Eic01b}.
\section{\textcolor{Chapter }{Subgroup series in pcp\texttt{\symbol{45}}groups}}\label{Subgroup series in pcp-groups}
\logpage{[ 7, 1, 0 ]}
\hyperdef{L}{X8266A0A2821D98A1}{}
{
Many algorithm for pcp\texttt{\symbol{45}}groups work by induction using some
series through the group. In this section we provide a number of useful series
for pcp\texttt{\symbol{45}}groups. An \emph{efa series} is a normal series with elementary or free abelian factors. See \cite{Eic00} for outlines on the algorithms of a number of the available series.
\subsection{\textcolor{Chapter }{PcpSeries}}
\logpage{[ 7, 1, 1 ]}\nobreak
\hyperdef{L}{X8037DAD77A19D9B2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpSeries({\mdseries\slshape U})\index{PcpSeries@\texttt{PcpSeries}}
\label{PcpSeries}
}\hfill{\scriptsize (function)}}\\
returns the polycyclic series of \mbox{\texttt{\mdseries\slshape U}} defined by an igs of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{EfaSeries}}
\logpage{[ 7, 1, 2 ]}\nobreak
\hyperdef{L}{X86C633357ACD342C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{EfaSeries({\mdseries\slshape U})\index{EfaSeries@\texttt{EfaSeries}}
\label{EfaSeries}
}\hfill{\scriptsize (attribute)}}\\
returns a normal series of \mbox{\texttt{\mdseries\slshape U}} with elementary or free abelian factors. }
\subsection{\textcolor{Chapter }{SemiSimpleEfaSeries}}
\logpage{[ 7, 1, 3 ]}\nobreak
\hyperdef{L}{X80ED4F8380DC477E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SemiSimpleEfaSeries({\mdseries\slshape U})\index{SemiSimpleEfaSeries@\texttt{SemiSimpleEfaSeries}}
\label{SemiSimpleEfaSeries}
}\hfill{\scriptsize (attribute)}}\\
returns an efa series of \mbox{\texttt{\mdseries\slshape U}} such that every factor in the series is semisimple as a module for \mbox{\texttt{\mdseries\slshape U}} over a finite field or over the rationals. }
\subsection{\textcolor{Chapter }{DerivedSeriesOfGroup}}
\logpage{[ 7, 1, 4 ]}\nobreak
\hyperdef{L}{X7A879948834BD889}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{DerivedSeriesOfGroup({\mdseries\slshape U})\index{DerivedSeriesOfGroup@\texttt{DerivedSeriesOfGroup}}
\label{DerivedSeriesOfGroup}
}\hfill{\scriptsize (method)}}\\
the derived series of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{RefinedDerivedSeries}}
\logpage{[ 7, 1, 5 ]}\nobreak
\hyperdef{L}{X866D4C5C79F26611}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RefinedDerivedSeries({\mdseries\slshape U})\index{RefinedDerivedSeries@\texttt{RefinedDerivedSeries}}
\label{RefinedDerivedSeries}
}\hfill{\scriptsize (function)}}\\
the derived series of \mbox{\texttt{\mdseries\slshape U}} refined to an efa series such that in each abelian factor of the derived
series the free abelian factor is at the top. }
\subsection{\textcolor{Chapter }{RefinedDerivedSeriesDown}}
\logpage{[ 7, 1, 6 ]}\nobreak
\hyperdef{L}{X86F7DE927DE3B5CD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RefinedDerivedSeriesDown({\mdseries\slshape U})\index{RefinedDerivedSeriesDown@\texttt{RefinedDerivedSeriesDown}}
\label{RefinedDerivedSeriesDown}
}\hfill{\scriptsize (function)}}\\
the derived series of \mbox{\texttt{\mdseries\slshape U}} refined to an efa series such that in each abelian factor of the derived
series the free abelian factor is at the bottom. }
\subsection{\textcolor{Chapter }{LowerCentralSeriesOfGroup}}
\logpage{[ 7, 1, 7 ]}\nobreak
\hyperdef{L}{X879D55A67DB42676}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{LowerCentralSeriesOfGroup({\mdseries\slshape U})\index{LowerCentralSeriesOfGroup@\texttt{LowerCentralSeriesOfGroup}}
\label{LowerCentralSeriesOfGroup}
}\hfill{\scriptsize (method)}}\\
the lower central series of \mbox{\texttt{\mdseries\slshape U}}. If \mbox{\texttt{\mdseries\slshape U}} does not have a largest nilpotent quotient group, then this function may not
terminate. }
\subsection{\textcolor{Chapter }{UpperCentralSeriesOfGroup}}
\logpage{[ 7, 1, 8 ]}\nobreak
\hyperdef{L}{X8428592E8773CD7B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{UpperCentralSeriesOfGroup({\mdseries\slshape U})\index{UpperCentralSeriesOfGroup@\texttt{UpperCentralSeriesOfGroup}}
\label{UpperCentralSeriesOfGroup}
}\hfill{\scriptsize (method)}}\\
the upper central series of \mbox{\texttt{\mdseries\slshape U}}. This function always terminates, but it may terminate at a proper subgroup
of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{TorsionByPolyEFSeries}}
\logpage{[ 7, 1, 9 ]}\nobreak
\hyperdef{L}{X83CA5DE785AE3F2C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{TorsionByPolyEFSeries({\mdseries\slshape U})\index{TorsionByPolyEFSeries@\texttt{TorsionByPolyEFSeries}}
\label{TorsionByPolyEFSeries}
}\hfill{\scriptsize (function)}}\\
returns an efa series of \mbox{\texttt{\mdseries\slshape U}} such that all torsion\texttt{\symbol{45}}free factors are at the top and all
finite factors are at the bottom. Such a series might not exist for \mbox{\texttt{\mdseries\slshape U}} and in this case the function returns fail.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups(5);|
Pcp-group with orders [ 2, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@Igs(G);|
[ g1, g2, g3, g4 ]
!gapprompt@gap>| !gapinput@PcpSeries(G);|
[ Pcp-group with orders [ 2, 0, 0, 0 ],
Pcp-group with orders [ 0, 0, 0 ],
Pcp-group with orders [ 0, 0 ],
Pcp-group with orders [ 0 ],
Pcp-group with orders [ ] ]
!gapprompt@gap>| !gapinput@List( PcpSeries(G), Igs );|
[ [ g1, g2, g3, g4 ], [ g2, g3, g4 ], [ g3, g4 ], [ g4 ], [ ] ]
\end{Verbatim}
}
Algorithms for pcp\texttt{\symbol{45}}groups often use an efa series of $G$ and work down over the factors of this series. Usually, pcp's of the factors
are more useful than the actual factors. Hence we provide the following.
\subsection{\textcolor{Chapter }{PcpsBySeries}}
\logpage{[ 7, 1, 10 ]}\nobreak
\hyperdef{L}{X7E39431286969377}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpsBySeries({\mdseries\slshape ser[, flag]})\index{PcpsBySeries@\texttt{PcpsBySeries}}
\label{PcpsBySeries}
}\hfill{\scriptsize (function)}}\\
returns a list of pcp's corresponding to the factors of the series. If the
parameter \mbox{\texttt{\mdseries\slshape flag}} is present and equals the string ``snf'', then each pcp corresponds to a decomposition of the abelian groups into
direct factors. }
\subsection{\textcolor{Chapter }{PcpsOfEfaSeries}}
\logpage{[ 7, 1, 11 ]}\nobreak
\hyperdef{L}{X79789A1C82139854}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpsOfEfaSeries({\mdseries\slshape U})\index{PcpsOfEfaSeries@\texttt{PcpsOfEfaSeries}}
\label{PcpsOfEfaSeries}
}\hfill{\scriptsize (attribute)}}\\
returns a list of pcps corresponding to an efa series of \mbox{\texttt{\mdseries\slshape U}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups(5);|
Pcp-group with orders [ 2, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@PcpsBySeries( DerivedSeriesOfGroup(G));|
[ Pcp [ g1, g2, g3, g4 ] with orders [ 2, 2, 2, 2 ],
Pcp [ g2^-2, g3^-2, g4^2 ] with orders [ 0, 0, 4 ],
Pcp [ g4^8 ] with orders [ 0 ] ]
!gapprompt@gap>| !gapinput@PcpsBySeries( RefinedDerivedSeries(G));|
[ Pcp [ g1, g2, g3 ] with orders [ 2, 2, 2 ],
Pcp [ g4 ] with orders [ 2 ],
Pcp [ g2^2, g3^2 ] with orders [ 0, 0 ],
Pcp [ g4^2 ] with orders [ 2 ],
Pcp [ g4^4 ] with orders [ 2 ],
Pcp [ g4^8 ] with orders [ 0 ] ]
!gapprompt@gap>| !gapinput@PcpsBySeries( DerivedSeriesOfGroup(G), "snf" );|
[ Pcp [ g2, g3, g1 ] with orders [ 2, 2, 4 ],
Pcp [ g4^2, g3^-2, g2^2*g4^2 ] with orders [ 4, 0, 0 ],
Pcp [ g4^8 ] with orders [ 0 ] ]
!gapprompt@gap>| !gapinput@G.1^4 in DerivedSubgroup( G );|
true
!gapprompt@gap>| !gapinput@G.1^2 = G.4;|
true
!gapprompt@gap>| !gapinput@ PcpsOfEfaSeries( G );|
[ Pcp [ g1 ] with orders [ 2 ],
Pcp [ g2 ] with orders [ 0 ],
Pcp [ g3 ] with orders [ 0 ],
Pcp [ g4 ] with orders [ 0 ] ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Orbit stabilizer methods for pcp\texttt{\symbol{45}}groups}}\label{Orbit stabilizer methods for pcp-groups}
\logpage{[ 7, 2, 0 ]}
\hyperdef{L}{X7CE2DA437FD2B383}{}
{
Let \mbox{\texttt{\mdseries\slshape U}} be a pcp\texttt{\symbol{45}}group which acts on a set $\Omega$. One of the fundamental problems in algorithmic group theory is the
determination of orbits and stabilizers of points in $\Omega$ under the action of \mbox{\texttt{\mdseries\slshape U}}. We distinguish two cases: the case that all considered orbits are finite and
the case that there are infinite orbits. In the latter case, an orbit cannot
be listed and a description of the orbit and its corresponding stabilizer is
much harder to obtain.
If the considered orbits are finite, then the following two functions can be
applied to compute the considered orbits and their corresponding stabilizers.
\subsection{\textcolor{Chapter }{PcpOrbitStabilizer}}
\logpage{[ 7, 2, 1 ]}\nobreak
\hyperdef{L}{X83E17DB483B33AB5}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpOrbitStabilizer({\mdseries\slshape point, gens, acts, oper})\index{PcpOrbitStabilizer@\texttt{PcpOrbitStabilizer}}
\label{PcpOrbitStabilizer}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PcpOrbitsStabilizers({\mdseries\slshape points, gens, acts, oper})\index{PcpOrbitsStabilizers@\texttt{PcpOrbitsStabilizers}}
\label{PcpOrbitsStabilizers}
}\hfill{\scriptsize (function)}}\\
The input \mbox{\texttt{\mdseries\slshape gens}} can be an igs or a pcp of a pcp\texttt{\symbol{45}}group \mbox{\texttt{\mdseries\slshape U}}. The elements in the list \mbox{\texttt{\mdseries\slshape gens}} act as the elements in the list \mbox{\texttt{\mdseries\slshape acts}} via the function \mbox{\texttt{\mdseries\slshape oper}} on the given points; that is, \mbox{\texttt{\mdseries\slshape oper( point, acts[i] )}} applies the $i$th generator to a given point. Thus the group defined by \mbox{\texttt{\mdseries\slshape acts}} must be a homomorphic image of the group defined by \mbox{\texttt{\mdseries\slshape gens}}. The first function returns a record containing the orbit as component
'orbit' and and igs for the stabilizer as component 'stab'. The second
function returns a list of records, each record contains 'repr' and 'stab'.
Both of these functions run forever on infinite orbits.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup( 0 );|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@mats := [ [[-1,0],[0,1]], [[1,1],[0,1]] ];;|
!gapprompt@gap>| !gapinput@pcp := Pcp(G);|
Pcp [ g1, g2 ] with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@PcpOrbitStabilizer( [0,1], pcp, mats, OnRight );|
rec( orbit := [ [ 0, 1 ] ],
stab := [ g1, g2 ],
word := [ [ [ 1, 1 ] ], [ [ 2, 1 ] ] ] )
\end{Verbatim}
If the considered orbits are infinite, then it may not always be possible to
determine a description of the orbits and their stabilizers. However, as shown
in \cite{EOs01} and \cite{Eic02}, it is possible to determine stabilizers and check if two elements are
contained in the same orbit if the given action of the polycyclic group is a
unimodular linear action on a vector space. The following functions are
available for this case. }
\subsection{\textcolor{Chapter }{StabilizerIntegralAction}}
\logpage{[ 7, 2, 2 ]}\nobreak
\hyperdef{L}{X80694BA480F69A0E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{StabilizerIntegralAction({\mdseries\slshape U, mats, v})\index{StabilizerIntegralAction@\texttt{StabilizerIntegralAction}}
\label{StabilizerIntegralAction}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OrbitIntegralAction({\mdseries\slshape U, mats, v, w})\index{OrbitIntegralAction@\texttt{OrbitIntegralAction}}
\label{OrbitIntegralAction}
}\hfill{\scriptsize (function)}}\\
The first function computes the stabilizer in \mbox{\texttt{\mdseries\slshape U}} of the vector \mbox{\texttt{\mdseries\slshape v}} where the pcp group \mbox{\texttt{\mdseries\slshape U}} acts via \mbox{\texttt{\mdseries\slshape mats}} on an integral space and \mbox{\texttt{\mdseries\slshape v}} and \mbox{\texttt{\mdseries\slshape w}} are elements in this integral space. The second function checks whether \mbox{\texttt{\mdseries\slshape v}} and \mbox{\texttt{\mdseries\slshape w}} are in the same orbit and the function returns either \mbox{\texttt{\mdseries\slshape false}} or a record containing an element in \mbox{\texttt{\mdseries\slshape U}} mapping \mbox{\texttt{\mdseries\slshape v}} to \mbox{\texttt{\mdseries\slshape w}} and the stabilizer of \mbox{\texttt{\mdseries\slshape v}}. }
\subsection{\textcolor{Chapter }{NormalizerIntegralAction}}
\logpage{[ 7, 2, 3 ]}\nobreak
\hyperdef{L}{X875BE4077B32A411}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NormalizerIntegralAction({\mdseries\slshape U, mats, B})\index{NormalizerIntegralAction@\texttt{NormalizerIntegralAction}}
\label{NormalizerIntegralAction}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ConjugacyIntegralAction({\mdseries\slshape U, mats, B, C})\index{ConjugacyIntegralAction@\texttt{ConjugacyIntegralAction}}
\label{ConjugacyIntegralAction}
}\hfill{\scriptsize (function)}}\\
The first function computes the normalizer in \mbox{\texttt{\mdseries\slshape U}} of the lattice with the basis \mbox{\texttt{\mdseries\slshape B}}, where the pcp group \mbox{\texttt{\mdseries\slshape U}} acts via \mbox{\texttt{\mdseries\slshape mats}} on an integral space and \mbox{\texttt{\mdseries\slshape B}} is a subspace of this integral space. The second functions checks whether the
two lattices with the bases \mbox{\texttt{\mdseries\slshape B}} and \mbox{\texttt{\mdseries\slshape C}} are contained in the same orbit under \mbox{\texttt{\mdseries\slshape U}}. The function returns either \mbox{\texttt{\mdseries\slshape false}} or a record with an element in \mbox{\texttt{\mdseries\slshape U}} mapping \mbox{\texttt{\mdseries\slshape B}} to \mbox{\texttt{\mdseries\slshape C}} and the stabilizer of \mbox{\texttt{\mdseries\slshape B}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
# get a pcp group and a free abelian normal subgroup
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups(8);|
Pcp-group with orders [ 0, 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@efa := EfaSeries(G);|
[ Pcp-group with orders [ 0, 0, 0, 0, 0 ],
Pcp-group with orders [ 0, 0, 0, 0 ],
Pcp-group with orders [ 0, 0, 0 ],
Pcp-group with orders [ ] ]
!gapprompt@gap>| !gapinput@N := efa[3];|
Pcp-group with orders [ 0, 0, 0 ]
!gapprompt@gap>| !gapinput@IsFreeAbelian(N);|
true
# create conjugation action on N
!gapprompt@gap>| !gapinput@mats := LinearActionOnPcp(Igs(G), Pcp(N));|
[ [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
[ [ 0, 0, 1 ], [ 1, -1, 1 ], [ 0, 1, 0 ] ],
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] ]
# take an arbitrary vector and compute its stabilizer
!gapprompt@gap>| !gapinput@StabilizerIntegralAction(G,mats, [2,3,4]);|
Pcp-group with orders [ 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@Igs(last);|
[ g1, g3, g4, g5 ]
# check orbits with some other vectors
!gapprompt@gap>| !gapinput@OrbitIntegralAction(G,mats, [2,3,4],[3,1,5]);|
rec( stab := Pcp-group with orders [ 0, 0, 0, 0 ], prei := g2 )
!gapprompt@gap>| !gapinput@OrbitIntegralAction(G,mats, [2,3,4], [4,6,8]);|
false
# compute the orbit of a subgroup of Z^3 under the action of G
!gapprompt@gap>| !gapinput@NormalizerIntegralAction(G, mats, [[1,0,0],[0,1,0]]);|
Pcp-group with orders [ 0, 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@Igs(last);|
[ g1, g2^2, g3, g4, g5 ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Centralizers, Normalizers and Intersections}}\label{Centralizers, Normalizers and Intersections}
\logpage{[ 7, 3, 0 ]}
\hyperdef{L}{X80E3B42E792532B3}{}
{
In this section we list a number of operations for which there are methods
installed to compute the corresponding features in polycyclic groups.
\subsection{\textcolor{Chapter }{Centralizer (for an element)}}
\logpage{[ 7, 3, 1 ]}\nobreak
\hyperdef{L}{X808EE8AD7EE3ECE1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Centralizer({\mdseries\slshape U, g})\index{Centralizer@\texttt{Centralizer}!for an element}
\label{Centralizer:for an element}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsConjugate({\mdseries\slshape U, g, h})\index{IsConjugate@\texttt{IsConjugate}!for elements}
\label{IsConjugate:for elements}
}\hfill{\scriptsize (method)}}\\
These functions solve the conjugacy problem for elements in
pcp\texttt{\symbol{45}}groups and they can be used to compute centralizers.
The first method returns a subgroup of the given group \mbox{\texttt{\mdseries\slshape U}}, the second method either returns a conjugating element or false if no such
element exists.
The methods are based on the orbit stabilizer algorithms described in \cite{EOs01}. For nilpotent groups, an algorithm to solve the conjugacy problem for
elements is described in \cite{Sims94}. }
\subsection{\textcolor{Chapter }{Centralizer (for a subgroup)}}
\logpage{[ 7, 3, 2 ]}\nobreak
\hyperdef{L}{X849B5C527BAFAAA4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Centralizer({\mdseries\slshape U, V})\index{Centralizer@\texttt{Centralizer}!for a subgroup}
\label{Centralizer:for a subgroup}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Normalizer({\mdseries\slshape U, V})\index{Normalizer@\texttt{Normalizer}}
\label{Normalizer}
}\hfill{\scriptsize (method)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsConjugate({\mdseries\slshape U, V, W})\index{IsConjugate@\texttt{IsConjugate}!for subgroups}
\label{IsConjugate:for subgroups}
}\hfill{\scriptsize (method)}}\\
These three functions solve the conjugacy problem for subgroups and compute
centralizers and normalizers of subgroups. The first two functions return
subgroups of the input group \mbox{\texttt{\mdseries\slshape U}}, the third function returns a conjugating element or false if no such element
exists.
The methods are based on the orbit stabilizer algorithms described in \cite{Eic02}. For nilpotent groups, an algorithm to solve the conjugacy problems for
subgroups is described in \cite{Lo98}. }
\subsection{\textcolor{Chapter }{Intersection}}
\logpage{[ 7, 3, 3 ]}\nobreak
\hyperdef{L}{X851069107CACF98E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Intersection({\mdseries\slshape U, N})\index{Intersection@\texttt{Intersection}}
\label{Intersection}
}\hfill{\scriptsize (function)}}\\
A general method to compute intersections of subgroups of a
pcp\texttt{\symbol{45}}group is described in \cite{Eic01b}, but it is not yet implemented here. However, intersections of subgroups $U, N \leq G$ can be computed if $N$ is normalising $U$. See \cite{Sims94} for an outline of the algorithm. }
}
\section{\textcolor{Chapter }{Finite subgroups}}\label{Finite subgroups}
\logpage{[ 7, 4, 0 ]}
\hyperdef{L}{X7CF015E87A2B2388}{}
{
There are various finite subgroups of interest in polycyclic groups. See \cite{Eic00} for a description of the algorithms underlying the functions in this section.
\subsection{\textcolor{Chapter }{TorsionSubgroup}}
\logpage{[ 7, 4, 1 ]}\nobreak
\hyperdef{L}{X8036FA507A170DC4}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{TorsionSubgroup({\mdseries\slshape U})\index{TorsionSubgroup@\texttt{TorsionSubgroup}}
\label{TorsionSubgroup}
}\hfill{\scriptsize (attribute)}}\\
If the set of elements of finite order forms a subgroup, then we call it the \emph{torsion subgroup}. This function determines the torsion subgroup of \mbox{\texttt{\mdseries\slshape U}}, if it exists, and returns fail otherwise. Note that a torsion subgroup does
always exist if \mbox{\texttt{\mdseries\slshape U}} is nilpotent. }
\subsection{\textcolor{Chapter }{NormalTorsionSubgroup}}
\logpage{[ 7, 4, 2 ]}\nobreak
\hyperdef{L}{X8082CD337972DC63}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NormalTorsionSubgroup({\mdseries\slshape U})\index{NormalTorsionSubgroup@\texttt{NormalTorsionSubgroup}}
\label{NormalTorsionSubgroup}
}\hfill{\scriptsize (attribute)}}\\
Each polycyclic groups has a unique largest finite normal subgroup. This
function computes it for \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{IsTorsionFree}}
\logpage{[ 7, 4, 3 ]}\nobreak
\hyperdef{L}{X86D92DA17DCE22DD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsTorsionFree({\mdseries\slshape U})\index{IsTorsionFree@\texttt{IsTorsionFree}}
\label{IsTorsionFree}
}\hfill{\scriptsize (property)}}\\
This function checks if \mbox{\texttt{\mdseries\slshape U}} is torsion free. It returns true or false. }
\subsection{\textcolor{Chapter }{FiniteSubgroupClasses}}
\logpage{[ 7, 4, 4 ]}\nobreak
\hyperdef{L}{X819058217B4F3DC0}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FiniteSubgroupClasses({\mdseries\slshape U})\index{FiniteSubgroupClasses@\texttt{FiniteSubgroupClasses}}
\label{FiniteSubgroupClasses}
}\hfill{\scriptsize (attribute)}}\\
There exist only finitely many conjugacy classes of finite subgroups in a
polycyclic group \mbox{\texttt{\mdseries\slshape U}} and this function can be used to compute them. The algorithm underlying this
function proceeds by working down a normal series of \mbox{\texttt{\mdseries\slshape U}} with elementary or free abelian factors. The following function can be used to
give the algorithm a specific series. }
\subsection{\textcolor{Chapter }{FiniteSubgroupClassesBySeries}}
\logpage{[ 7, 4, 5 ]}\nobreak
\hyperdef{L}{X7E7C32EA81A297B6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FiniteSubgroupClassesBySeries({\mdseries\slshape U, pcps})\index{FiniteSubgroupClassesBySeries@\texttt{FiniteSubgroupClassesBySeries}}
\label{FiniteSubgroupClassesBySeries}
}\hfill{\scriptsize (function)}}\\
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups(15);|
Pcp-group with orders [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0 ]
!gapprompt@gap>| !gapinput@TorsionSubgroup(G);|
Pcp-group with orders [ 5, 2 ]
!gapprompt@gap>| !gapinput@NormalTorsionSubgroup(G);|
Pcp-group with orders [ 5, 2 ]
!gapprompt@gap>| !gapinput@IsTorsionFree(G);|
false
!gapprompt@gap>| !gapinput@FiniteSubgroupClasses(G);|
[ Pcp-group with orders [ 5, 2 ]^G,
Pcp-group with orders [ 2 ]^G,
Pcp-group with orders [ 5 ]^G,
Pcp-group with orders [ ]^G ]
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup( 0 );|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@TorsionSubgroup(G);|
fail
!gapprompt@gap>| !gapinput@NormalTorsionSubgroup(G);|
Pcp-group with orders [ ]
!gapprompt@gap>| !gapinput@IsTorsionFree(G);|
false
!gapprompt@gap>| !gapinput@FiniteSubgroupClasses(G);|
[ Pcp-group with orders [ 2 ]^G,
Pcp-group with orders [ 2 ]^G,
Pcp-group with orders [ ]^G ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Subgroups of finite index and maximal subgroups}}\label{Subgroups of finite index and maximal subgroups}
\logpage{[ 7, 5, 0 ]}
\hyperdef{L}{X7D9F737F80F6E396}{}
{
Here we outline functions to determine various types of subgroups of finite
index in polycyclic groups. Again, see \cite{Eic00} for a description of the algorithms underlying the functions in this section.
Also, we refer to \cite{Lo99} for an alternative approach.
\subsection{\textcolor{Chapter }{MaximalSubgroupClassesByIndex}}
\logpage{[ 7, 5, 1 ]}\nobreak
\hyperdef{L}{X87D62D497A8715FB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{MaximalSubgroupClassesByIndex({\mdseries\slshape U, p})\index{MaximalSubgroupClassesByIndex@\texttt{MaximalSubgroupClassesByIndex}}
\label{MaximalSubgroupClassesByIndex}
}\hfill{\scriptsize (operation)}}\\
Each maximal subgroup of a polycyclic group \mbox{\texttt{\mdseries\slshape U}} has \mbox{\texttt{\mdseries\slshape p}}\texttt{\symbol{45}}power index for some prime \mbox{\texttt{\mdseries\slshape p}}. This function can be used to determine the conjugacy classes of all maximal
subgroups of \mbox{\texttt{\mdseries\slshape p}}\texttt{\symbol{45}}power index for a given prime \mbox{\texttt{\mdseries\slshape p}}. }
\subsection{\textcolor{Chapter }{LowIndexSubgroupClasses}}
\logpage{[ 7, 5, 2 ]}\nobreak
\hyperdef{L}{X7800133F81BC7674}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{LowIndexSubgroupClasses({\mdseries\slshape U, n})\index{LowIndexSubgroupClasses@\texttt{LowIndexSubgroupClasses}}
\label{LowIndexSubgroupClasses}
}\hfill{\scriptsize (operation)}}\\
There are only finitely many subgroups of a given index in a polycyclic group \mbox{\texttt{\mdseries\slshape U}}. This function computes conjugacy classes of all subgroups of index \mbox{\texttt{\mdseries\slshape n}} in \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{LowIndexNormalSubgroups}}
\logpage{[ 7, 5, 3 ]}\nobreak
\hyperdef{L}{X7F7067C77F2DC32C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{LowIndexNormalSubgroups({\mdseries\slshape U, n})\index{LowIndexNormalSubgroups@\texttt{LowIndexNormalSubgroups}}
\label{LowIndexNormalSubgroups}
}\hfill{\scriptsize (operation)}}\\
This function computes the normal subgroups of index \mbox{\texttt{\mdseries\slshape n}} in \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{NilpotentByAbelianNormalSubgroup}}
\logpage{[ 7, 5, 4 ]}\nobreak
\hyperdef{L}{X85A5BC447D83175F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NilpotentByAbelianNormalSubgroup({\mdseries\slshape U})\index{NilpotentByAbelianNormalSubgroup@\texttt{NilpotentByAbelianNormalSubgroup}}
\label{NilpotentByAbelianNormalSubgroup}
}\hfill{\scriptsize (function)}}\\
This function returns a normal subgroup \mbox{\texttt{\mdseries\slshape N}} of finite index in \mbox{\texttt{\mdseries\slshape U}} such that \mbox{\texttt{\mdseries\slshape N}} is nilpotent\texttt{\symbol{45}}by\texttt{\symbol{45}}abelian. Such a subgroup
exists in every polycyclic group and this function computes such a subgroup
using LowIndexNormal. However, we note that this function is not very
efficient and the function NilpotentByAbelianByFiniteSeries may well be more
efficient on this task.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups(2);|
Pcp-group with orders [ 0, 0, 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@MaximalSubgroupClassesByIndex( G, 61 );;|
!gapprompt@gap>| !gapinput@max := List( last, Representative );;|
!gapprompt@gap>| !gapinput@List( max, x -> Index( G, x ) );|
[ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 226981 ]
!gapprompt@gap>| !gapinput@LowIndexSubgroupClasses( G, 61 );;|
!gapprompt@gap>| !gapinput@low := List( last, Representative );;|
!gapprompt@gap>| !gapinput@List( low, x -> Index( G, x ) );|
[ 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61 ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Further attributes for pcp\texttt{\symbol{45}}groups based on the Fitting
subgroup}}\label{Further attributes for pcp-groups based on the Fitting subgroup}
\logpage{[ 7, 6, 0 ]}
\hyperdef{L}{X785E0E877AB1D549}{}
{
In this section we provide a variety of other attributes for
pcp\texttt{\symbol{45}}groups. Most of the methods below are based or related
to the Fitting subgroup of the given group. We refer to \cite{Eic01} for a description of the underlying methods.
\subsection{\textcolor{Chapter }{FittingSubgroup}}
\logpage{[ 7, 6, 1 ]}\nobreak
\hyperdef{L}{X780552B57C30DD8F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FittingSubgroup({\mdseries\slshape U})\index{FittingSubgroup@\texttt{FittingSubgroup}}
\label{FittingSubgroup}
}\hfill{\scriptsize (attribute)}}\\
returns the Fitting subgroup of \mbox{\texttt{\mdseries\slshape U}}; that is, the largest nilpotent normal subgroup of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{IsNilpotentByFinite}}
\logpage{[ 7, 6, 2 ]}\nobreak
\hyperdef{L}{X86BD63DC844731DF}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsNilpotentByFinite({\mdseries\slshape U})\index{IsNilpotentByFinite@\texttt{IsNilpotentByFinite}}
\label{IsNilpotentByFinite}
}\hfill{\scriptsize (property)}}\\
checks whether the Fitting subgroup of \mbox{\texttt{\mdseries\slshape U}} has finite index. }
\subsection{\textcolor{Chapter }{Centre}}
\logpage{[ 7, 6, 3 ]}\nobreak
\hyperdef{L}{X847ABE6F781C7FE8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{Centre({\mdseries\slshape U})\index{Centre@\texttt{Centre}}
\label{Centre}
}\hfill{\scriptsize (method)}}\\
returns the centre of \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{FCCentre}}
\logpage{[ 7, 6, 4 ]}\nobreak
\hyperdef{L}{X861C36368435EB09}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{FCCentre({\mdseries\slshape U})\index{FCCentre@\texttt{FCCentre}}
\label{FCCentre}
}\hfill{\scriptsize (method)}}\\
returns the FC\texttt{\symbol{45}}centre of \mbox{\texttt{\mdseries\slshape U}}; that is, the subgroup containing all elements having a finite conjugacy
class in \mbox{\texttt{\mdseries\slshape U}}. }
\subsection{\textcolor{Chapter }{PolyZNormalSubgroup}}
\logpage{[ 7, 6, 5 ]}\nobreak
\hyperdef{L}{X7E75E2BC806746AC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{PolyZNormalSubgroup({\mdseries\slshape U})\index{PolyZNormalSubgroup@\texttt{PolyZNormalSubgroup}}
\label{PolyZNormalSubgroup}
}\hfill{\scriptsize (function)}}\\
returns a normal subgroup \mbox{\texttt{\mdseries\slshape N}} of finite index in \mbox{\texttt{\mdseries\slshape U}}, such that \mbox{\texttt{\mdseries\slshape N}} has a polycyclic series with infinite factors only. }
\subsection{\textcolor{Chapter }{NilpotentByAbelianByFiniteSeries}}
\logpage{[ 7, 6, 6 ]}\nobreak
\hyperdef{L}{X86800BF783E30D4A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NilpotentByAbelianByFiniteSeries({\mdseries\slshape U})\index{NilpotentByAbelianByFiniteSeries@\texttt{NilpotentByAbelianByFiniteSeries}}
\label{NilpotentByAbelianByFiniteSeries}
}\hfill{\scriptsize (function)}}\\
returns a normal series $1 \leq F \leq A \leq U$ such that $F$ is nilpotent, $A/F$ is abelian and $U/A$ is finite. This series is computed using the Fitting subgroup and the centre
of the Fitting factor. }
}
\section{\textcolor{Chapter }{Functions for nilpotent groups}}\label{Functions for nilpotent groups}
\logpage{[ 7, 7, 0 ]}
\hyperdef{L}{X878DBDC77CCA4F7E}{}
{
There are (very few) functions which are available for nilpotent groups only.
First, there are the different central series. These are available for all
groups, but for nilpotent groups they terminate and provide series through the
full group. Secondly, the determination of a minimal generating set is
available for nilpotent groups only.
\subsection{\textcolor{Chapter }{MinimalGeneratingSet}}
\logpage{[ 7, 7, 1 ]}\nobreak
\hyperdef{L}{X81D15723804771E2}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{MinimalGeneratingSet({\mdseries\slshape U})\index{MinimalGeneratingSet@\texttt{MinimalGeneratingSet}}
\label{MinimalGeneratingSet}
}\hfill{\scriptsize (method)}}\\
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups(14);|
Pcp-group with orders [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 0, 5, 5, 4, 0, 6,
5, 5, 4, 0, 10, 6 ]
!gapprompt@gap>| !gapinput@IsNilpotent(G);|
true
!gapprompt@gap>| !gapinput@PcpsBySeries( LowerCentralSeriesOfGroup(G));|
[ Pcp [ g1, g2 ] with orders [ 0, 0 ],
Pcp [ g3 ] with orders [ 0 ],
Pcp [ g4 ] with orders [ 0 ],
Pcp [ g5 ] with orders [ 0 ],
Pcp [ g6, g7 ] with orders [ 0, 0 ],
Pcp [ g8 ] with orders [ 0 ],
Pcp [ g9, g10 ] with orders [ 0, 0 ],
Pcp [ g11, g12, g13 ] with orders [ 5, 4, 0 ],
Pcp [ g14, g15, g16, g17, g18 ] with orders [ 5, 5, 4, 0, 6 ],
Pcp [ g19, g20, g21, g22, g23, g24 ] with orders [ 5, 5, 4, 0, 10, 6 ] ]
!gapprompt@gap>| !gapinput@PcpsBySeries( UpperCentralSeriesOfGroup(G));|
[ Pcp [ g1, g2 ] with orders [ 0, 0 ],
Pcp [ g3 ] with orders [ 0 ],
Pcp [ g4 ] with orders [ 0 ],
Pcp [ g5 ] with orders [ 0 ],
Pcp [ g6, g7 ] with orders [ 0, 0 ],
Pcp [ g8 ] with orders [ 0 ],
Pcp [ g9, g10 ] with orders [ 0, 0 ],
Pcp [ g11, g12, g13 ] with orders [ 5, 4, 0 ],
Pcp [ g14, g15, g16, g17, g18 ] with orders [ 5, 5, 4, 0, 6 ],
Pcp [ g19, g20, g21, g22, g23, g24 ] with orders [ 5, 5, 4, 0, 10, 6 ] ]
!gapprompt@gap>| !gapinput@MinimalGeneratingSet(G);|
[ g1, g2 ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Random methods for pcp\texttt{\symbol{45}}groups}}\label{Random methods for pcp-groups}
\logpage{[ 7, 8, 0 ]}
\hyperdef{L}{X8640F9D47A1F7434}{}
{
Below we introduce a function which computes orbit and stabilizer using a
random method. This function tries to approximate the orbit and the
stabilizer, but the returned orbit or stabilizer may be incomplete. This
function is used in the random methods to compute normalizers and
centralizers. Note that deterministic methods for these purposes are also
available.
\subsection{\textcolor{Chapter }{RandomCentralizerPcpGroup (for an element)}}
\logpage{[ 7, 8, 1 ]}\nobreak
\hyperdef{L}{X80AEE73E7D639699}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RandomCentralizerPcpGroup({\mdseries\slshape U, g})\index{RandomCentralizerPcpGroup@\texttt{RandomCentralizerPcpGroup}!for an element}
\label{RandomCentralizerPcpGroup:for an element}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RandomCentralizerPcpGroup({\mdseries\slshape U, V})\index{RandomCentralizerPcpGroup@\texttt{RandomCentralizerPcpGroup}!for a subgroup}
\label{RandomCentralizerPcpGroup:for a subgroup}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RandomNormalizerPcpGroup({\mdseries\slshape U, V})\index{RandomNormalizerPcpGroup@\texttt{RandomNormalizerPcpGroup}}
\label{RandomNormalizerPcpGroup}
}\hfill{\scriptsize (function)}}\\
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup(0);|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@mats := [[[-1, 0],[0,1]], [[1,1],[0,1]]];|
[ [ [ -1, 0 ], [ 0, 1 ] ], [ [ 1, 1 ], [ 0, 1 ] ] ]
!gapprompt@gap>| !gapinput@pcp := Pcp(G);|
Pcp [ g1, g2 ] with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@RandomPcpOrbitStabilizer( [1,0], pcp, mats, OnRight ).stab;|
#I Orbit longer than limit: exiting.
[ ]
!gapprompt@gap>| !gapinput@g := Igs(G)[1];|
g1
!gapprompt@gap>| !gapinput@RandomCentralizerPcpGroup( G, g );|
#I Stabilizer not increasing: exiting.
Pcp-group with orders [ 2 ]
!gapprompt@gap>| !gapinput@Igs(last);|
[ g1 ]
\end{Verbatim}
}
}
\section{\textcolor{Chapter }{Non\texttt{\symbol{45}}abelian tensor product and Schur extensions}}\label{Non-abelian tensor product and Schur extensions}
\logpage{[ 7, 9, 0 ]}
\hyperdef{L}{X824142B784453DB9}{}
{
\subsection{\textcolor{Chapter }{SchurExtension}}
\logpage{[ 7, 9, 1 ]}\nobreak
\hyperdef{L}{X79EF28D9845878C9}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SchurExtension({\mdseries\slshape G})\index{SchurExtension@\texttt{SchurExtension}}
\label{SchurExtension}
}\hfill{\scriptsize (attribute)}}\\
Let \mbox{\texttt{\mdseries\slshape G}} be a polycyclic group with a polycyclic generating sequence consisting of $n$ elements. This function computes the largest central extension \mbox{\texttt{\mdseries\slshape H}} of \mbox{\texttt{\mdseries\slshape G}} such that \mbox{\texttt{\mdseries\slshape H}} is generated by $n$ elements. If $F/R$ is the underlying polycyclic presentation for \mbox{\texttt{\mdseries\slshape G}}, then \mbox{\texttt{\mdseries\slshape H}} is isomorphic to $F/[R,F]$.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup( 0 );|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@Centre( G );|
Pcp-group with orders [ ]
!gapprompt@gap>| !gapinput@H := SchurExtension( G );|
Pcp-group with orders [ 2, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@Centre( H );|
Pcp-group with orders [ 0, 0 ]
!gapprompt@gap>| !gapinput@H/Centre(H);|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@Subgroup( H, [H.1,H.2] ) = H;|
true
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{SchurExtensionEpimorphism}}
\logpage{[ 7, 9, 2 ]}\nobreak
\hyperdef{L}{X84B60EC978A9A05E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SchurExtensionEpimorphism({\mdseries\slshape G})\index{SchurExtensionEpimorphism@\texttt{SchurExtensionEpimorphism}}
\label{SchurExtensionEpimorphism}
}\hfill{\scriptsize (attribute)}}\\
returns the projection from the Schur extension $G^{*}$ of \mbox{\texttt{\mdseries\slshape G}} onto \mbox{\texttt{\mdseries\slshape G}}. See the function \texttt{SchurExtension}. The kernel of this epimorphism is the direct product of the Schur
multiplicator of \mbox{\texttt{\mdseries\slshape G}} and a direct product of $n$ copies of ${\ensuremath{\mathbb Z}}$ where $n$ is the number of generators in the polycyclic presentation for \mbox{\texttt{\mdseries\slshape G}}. The Schur multiplicator is the intersection of the kernel and the derived
group of the source. See also the function \texttt{SchurCover}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@gl23 := Range( IsomorphismPcpGroup( GL(2,3) ) );|
Pcp-group with orders [ 2, 3, 2, 2, 2 ]
!gapprompt@gap>| !gapinput@SchurExtensionEpimorphism( gl23 );|
[ g1, g2, g3, g4, g5, g6, g7, g8, g9, g10 ] -> [ g1, g2, g3, g4, g5,
id, id, id, id, id ]
!gapprompt@gap>| !gapinput@Kernel( last );|
Pcp-group with orders [ 0, 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@AbelianInvariantsMultiplier( gl23 );|
[ ]
!gapprompt@gap>| !gapinput@Intersection( Kernel(epi), DerivedSubgroup( Source(epi) ) );|
[ ]
\end{Verbatim}
There is a crossed pairing from \mbox{\texttt{\mdseries\slshape G}} into $(G^{*})'$ which can be defined via this epimorphism:
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup(0);|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@epi := SchurExtensionEpimorphism( G );|
[ g1, g2, g3, g4 ] -> [ g1, g2, id, id ]
!gapprompt@gap>| !gapinput@PreImagesRepresentative( epi, G.1 );|
g1
!gapprompt@gap>| !gapinput@PreImagesRepresentative( epi, G.2 );|
g2
!gapprompt@gap>| !gapinput@Comm( last, last2 );|
g2^-2*g4
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{SchurCover}}
\logpage{[ 7, 9, 3 ]}\nobreak
\hyperdef{L}{X7DD1E37987612042}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SchurCover({\mdseries\slshape G})\index{SchurCover@\texttt{SchurCover}}
\label{SchurCover}
}\hfill{\scriptsize (function)}}\\
computes a Schur covering group of the polycyclic group \mbox{\texttt{\mdseries\slshape G}}. A Schur covering is a largest central extension \mbox{\texttt{\mdseries\slshape H}} of \mbox{\texttt{\mdseries\slshape G}} such that the kernel \mbox{\texttt{\mdseries\slshape M}} of the projection of \mbox{\texttt{\mdseries\slshape H}} onto \mbox{\texttt{\mdseries\slshape G}} is contained in the commutator subgroup of \mbox{\texttt{\mdseries\slshape H}}.
If \mbox{\texttt{\mdseries\slshape G}} is given by a presentation $F/R$, then \mbox{\texttt{\mdseries\slshape M}} is isomorphic to the subgroup $R \cap [F,F] / [R,F]$. Let $C$ be a complement to $R \cap [F,F] / [R,F]$ in $R/[R,F]$. Then $F/C$ is isomorphic to \mbox{\texttt{\mdseries\slshape H}} and $R/C$ is isomorphic to \mbox{\texttt{\mdseries\slshape M}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := AbelianPcpGroup( 3 );|
Pcp-group with orders [ 0, 0, 0 ]
!gapprompt@gap>| !gapinput@ext := SchurCover( G );|
Pcp-group with orders [ 0, 0, 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@Centre( ext );|
Pcp-group with orders [ 0, 0, 0 ]
!gapprompt@gap>| !gapinput@IsSubgroup( DerivedSubgroup( ext ), last );|
true
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{AbelianInvariantsMultiplier}}
\logpage{[ 7, 9, 4 ]}\nobreak
\hyperdef{L}{X792BC39D7CEB1D27}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{AbelianInvariantsMultiplier({\mdseries\slshape G})\index{AbelianInvariantsMultiplier@\texttt{AbelianInvariantsMultiplier}}
\label{AbelianInvariantsMultiplier}
}\hfill{\scriptsize (attribute)}}\\
returns a list of the abelian invariants of the Schur multiplier of G.
Note that the Schur multiplicator of a polycyclic group is a finitely
generated abelian group.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup( 0 );|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@DirectProduct( G, AbelianPcpGroup( 2 ) );|
Pcp-group with orders [ 0, 0, 2, 0 ]
!gapprompt@gap>| !gapinput@AbelianInvariantsMultiplier( last );|
[ 0, 2, 2, 2, 2 ]
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{NonAbelianExteriorSquareEpimorphism}}
\logpage{[ 7, 9, 5 ]}\nobreak
\hyperdef{L}{X822ED5978647C93B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NonAbelianExteriorSquareEpimorphism({\mdseries\slshape G})\index{NonAbelianExteriorSquareEpimorphism@\texttt{NonAbelianExteriorSquareEpimorphism}}
\label{NonAbelianExteriorSquareEpimorphism}
}\hfill{\scriptsize (function)}}\\
returns the epimorphism of the non\texttt{\symbol{45}}abelian exterior square
of a polycyclic group \mbox{\texttt{\mdseries\slshape G}} onto the derived group of \mbox{\texttt{\mdseries\slshape G}}. The non\texttt{\symbol{45}}abelian exterior square can be defined as the
derived subgroup of a Schur cover of \mbox{\texttt{\mdseries\slshape G}}. The isomorphism type of the non\texttt{\symbol{45}}abelian exterior square
is unique despite the fact that the isomorphism type of a Schur cover of a
polycyclic groups need not be unique. The derived group of a Schur cover has a
natural projection onto the derived group of \mbox{\texttt{\mdseries\slshape G}} which is what the function returns.
The kernel of the epimorphism is isomorphic to the Schur multiplicator of \mbox{\texttt{\mdseries\slshape G}}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := ExamplesOfSomePcpGroups( 3 );|
Pcp-group with orders [ 0, 0 ]
!gapprompt@gap>| !gapinput@G := DirectProduct( G,G );|
Pcp-group with orders [ 0, 0, 0, 0 ]
!gapprompt@gap>| !gapinput@AbelianInvariantsMultiplier( G );|
[ [ 0, 1 ], [ 2, 3 ] ]
!gapprompt@gap>| !gapinput@epi := NonAbelianExteriorSquareEpimorphism( G );|
[ g2^-2*g5, g4^-2*g10, g6, g7, g8, g9 ] -> [ g2^-2, g4^-2, id, id, id, id ]
!gapprompt@gap>| !gapinput@Kernel( epi );|
Pcp-group with orders [ 0, 2, 2, 2 ]
!gapprompt@gap>| !gapinput@Collected( AbelianInvariants( last ) );|
[ [ 0, 1 ], [ 2, 3 ] ]
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{NonAbelianExteriorSquare}}
\logpage{[ 7, 9, 6 ]}\nobreak
\hyperdef{L}{X8739CD4686301A0E}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NonAbelianExteriorSquare({\mdseries\slshape G})\index{NonAbelianExteriorSquare@\texttt{NonAbelianExteriorSquare}}
\label{NonAbelianExteriorSquare}
}\hfill{\scriptsize (attribute)}}\\
computes the non\texttt{\symbol{45}}abelian exterior square of a polycyclic
group \mbox{\texttt{\mdseries\slshape G}}. See the explanation for \texttt{NonAbelianExteriorSquareEpimorphism}. The natural projection of the non\texttt{\symbol{45}}abelian exterior square
onto the derived group of \mbox{\texttt{\mdseries\slshape G}} is stored in the component \texttt{!.epimorphism}.
There is a crossed pairing from $G\times G$ into $G\wedge G$. See the function \texttt{SchurExtensionEpimorphism} for details. The crossed pairing is stored in the component \texttt{!.crossedPairing}. This is the crossed pairing $\lambda$ in \cite{EickNickel07}.
\begin{Verbatim}[commandchars=@|B,fontsize=\small,frame=single,label=Example]
@gapprompt|gap>B @gapinput|G := DihedralPcpGroup(0);B
Pcp-group with orders [ 2, 0 ]
@gapprompt|gap>B @gapinput|GwG := NonAbelianExteriorSquare( G );B
Pcp-group with orders [ 0 ]
@gapprompt|gap>B @gapinput|lambda := GwG!.crossedPairing;B
function( g, h ) ... end
@gapprompt|gap>B @gapinput|lambda( G.1, G.2 );B
g2^2*g4^-1
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{NonAbelianTensorSquareEpimorphism}}
\logpage{[ 7, 9, 7 ]}\nobreak
\hyperdef{L}{X86553D7B7DABF38F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NonAbelianTensorSquareEpimorphism({\mdseries\slshape G})\index{NonAbelianTensorSquareEpimorphism@\texttt{NonAbelianTensorSquareEpimorphism}}
\label{NonAbelianTensorSquareEpimorphism}
}\hfill{\scriptsize (function)}}\\
returns for a polycyclic group \mbox{\texttt{\mdseries\slshape G}} the projection of the non\texttt{\symbol{45}}abelian tensor square $G\otimes G$ onto the non\texttt{\symbol{45}}abelian exterior square $G\wedge G$. The range of that epimorphism has the component \texttt{!.epimorphism} set to the projection of the non\texttt{\symbol{45}}abelian exterior square
onto the derived group of \mbox{\texttt{\mdseries\slshape G}}. See also the function \texttt{NonAbelianExteriorSquare}.
With the result of this function one can compute the groups in the commutative
diagram at the beginning of the paper \cite{EickNickel07}. The kernel of the returned epimorphism is the group $\nabla(G)$. The kernel of the composition of this epimorphism and the above mention
projection onto $G'$ is the group $J(G)$.
\begin{Verbatim}[commandchars=@|B,fontsize=\small,frame=single,label=Example]
@gapprompt|gap>B @gapinput|G := DihedralPcpGroup(0);B
Pcp-group with orders [ 2, 0 ]
@gapprompt|gap>B @gapinput|G := DirectProduct(G,G);B
Pcp-group with orders [ 2, 0, 2, 0 ]
@gapprompt|gap>B @gapinput|alpha := NonAbelianTensorSquareEpimorphism( G );B
[ g9*g25^-1, g10*g26^-1, g11*g27, g12*g28, g13*g29, g14*g30, g15, g16,
g17,
g18, g19, g20, g21, g22, g23, g24 ] -> [ g2^-2*g6, g4^-2*g12, g8,
g9, g10,
g11, id, id, id, id, id, id, id, id, id, id ]
@gapprompt|gap>B @gapinput|gamma := Range( alpha )!.epimorphism;B
[ g2^-2*g6, g4^-2*g12, g8, g9, g10, g11 ] -> [ g2^-2, g4^-2, id, id,
id, id ]
@gapprompt|gap>B @gapinput|JG := Kernel( alpha * gamma );B
Pcp-group with orders [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ]
@gapprompt|gap>B @gapinput|Image( alpha, JG );B
Pcp-group with orders [ 2, 2, 2, 2 ]
@gapprompt|gap>B @gapinput|AbelianInvariantsMultiplier( G );B
[ [ 2, 4 ] ]
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{NonAbelianTensorSquare}}
\logpage{[ 7, 9, 8 ]}\nobreak
\hyperdef{L}{X7C0DF7C97F78C666}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NonAbelianTensorSquare({\mdseries\slshape G})\index{NonAbelianTensorSquare@\texttt{NonAbelianTensorSquare}}
\label{NonAbelianTensorSquare}
}\hfill{\scriptsize (attribute)}}\\
computes for a polycyclic group \mbox{\texttt{\mdseries\slshape G}} the non\texttt{\symbol{45}}abelian tensor square $G\otimes G$.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
!gapprompt@gap>| !gapinput@G := AlternatingGroup( IsPcGroup, 4 );|
<pc group of size 12 with 3 generators>
!gapprompt@gap>| !gapinput@PcGroupToPcpGroup( G );|
Pcp-group with orders [ 3, 2, 2 ]
!gapprompt@gap>| !gapinput@NonAbelianTensorSquare( last );|
Pcp-group with orders [ 2, 2, 2, 3 ]
!gapprompt@gap>| !gapinput@PcpGroupToPcGroup( last );|
<pc group of size 24 with 4 generators>
!gapprompt@gap>| !gapinput@DirectFactorsOfGroup( last );|
[ Group([ f1, f2, f3 ]), Group([ f4 ]) ]
!gapprompt@gap>| !gapinput@List( last, Size );|
[ 8, 3 ]
!gapprompt@gap>| !gapinput@IdGroup( last2[1] );|
[ 8, 4 ] # the quaternion group of Order 8
!gapprompt@gap>| !gapinput@G := DihedralPcpGroup( 0 );|
Pcp-group with orders [ 2, 0 ]
!gapprompt@gap>| !gapinput@ten := NonAbelianTensorSquare( G );|
Pcp-group with orders [ 0, 2, 2, 2 ]
!gapprompt@gap>| !gapinput@IsAbelian( ten );|
true
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{NonAbelianExteriorSquarePlusEmbedding}}
\logpage{[ 7, 9, 9 ]}\nobreak
\hyperdef{L}{X7AE75EC1860FFE7A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NonAbelianExteriorSquarePlusEmbedding({\mdseries\slshape G})\index{NonAbelianExteriorSquarePlusEmbedding@\texttt{Non}\-\texttt{Abelian}\-\texttt{Exterior}\-\texttt{Square}\-\texttt{Plus}\-\texttt{Embedding}}
\label{NonAbelianExteriorSquarePlusEmbedding}
}\hfill{\scriptsize (function)}}\\
returns an embedding from the non\texttt{\symbol{45}}abelian exterior square $G\wedge G$ into an extensions of $G\wedge G$ by $G\times G$. For the significance of the group see the paper \cite{EickNickel07}. The range of the epimorphism is the group $\tau(G)$ in that paper. }
\subsection{\textcolor{Chapter }{NonAbelianTensorSquarePlusEpimorphism}}
\logpage{[ 7, 9, 10 ]}\nobreak
\hyperdef{L}{X7D96C84E87925B0F}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NonAbelianTensorSquarePlusEpimorphism({\mdseries\slshape G})\index{NonAbelianTensorSquarePlusEpimorphism@\texttt{Non}\-\texttt{Abelian}\-\texttt{Tensor}\-\texttt{Square}\-\texttt{Plus}\-\texttt{Epimorphism}}
\label{NonAbelianTensorSquarePlusEpimorphism}
}\hfill{\scriptsize (function)}}\\
returns an epimorphisms of $\nu(G)$ onto $\tau(G)$. The group $\nu(G)$ is an extension of the non\texttt{\symbol{45}}abelian tensor square $G\otimes G$ of $G$ by $G\times G$. The group $\tau(G)$ is an extension of the non\texttt{\symbol{45}}abelian exterior square $G\wedge G$ by $G\times G$. For details see \cite{EickNickel07}. }
\subsection{\textcolor{Chapter }{NonAbelianTensorSquarePlus}}
\logpage{[ 7, 9, 11 ]}\nobreak
\hyperdef{L}{X8746533787C4E8BC}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{NonAbelianTensorSquarePlus({\mdseries\slshape G})\index{NonAbelianTensorSquarePlus@\texttt{NonAbelianTensorSquarePlus}}
\label{NonAbelianTensorSquarePlus}
}\hfill{\scriptsize (function)}}\\
returns the group $\nu(G)$ in \cite{EickNickel07}. }
\subsection{\textcolor{Chapter }{WhiteheadQuadraticFunctor}}
\logpage{[ 7, 9, 12 ]}\nobreak
\hyperdef{L}{X78F9184078B2761A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{WhiteheadQuadraticFunctor({\mdseries\slshape G})\index{WhiteheadQuadraticFunctor@\texttt{WhiteheadQuadraticFunctor}}
\label{WhiteheadQuadraticFunctor}
}\hfill{\scriptsize (function)}}\\
returns Whitehead's universal quadratic functor of $G$, see \cite{EickNickel07} for a description. }
}
\section{\textcolor{Chapter }{Schur covers}}\label{Schur covers}
\logpage{[ 7, 10, 0 ]}
\hyperdef{L}{X7D3023697BA5CE5A}{}
{
This section contains a function to determine the Schur covers of a finite $p$\texttt{\symbol{45}}group up to isomorphism.
\subsection{\textcolor{Chapter }{SchurCovers}}
\logpage{[ 7, 10, 1 ]}\nobreak
\hyperdef{L}{X7D90B44E7B96AFF1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SchurCovers({\mdseries\slshape G})\index{SchurCovers@\texttt{SchurCovers}}
\label{SchurCovers}
}\hfill{\scriptsize (function)}}\\
Let \mbox{\texttt{\mdseries\slshape G}} be a finite $p$\texttt{\symbol{45}}group defined as a pcp group. This function returns a
complete and irredundant set of isomorphism types of Schur covers of \mbox{\texttt{\mdseries\slshape G}}. The algorithm implements a method of Nickel's Phd Thesis. }
}
}
\chapter{\textcolor{Chapter }{Cohomology for pcp\texttt{\symbol{45}}groups}}\label{Cohomology for pcp-groups}
\logpage{[ 8, 0, 0 ]}
\hyperdef{L}{X796AB9787E2A752C}{}
{
The \textsf{GAP} 4 package \textsf{Polycyclic} provides methods to compute the first and second cohomology group for a
pcp\texttt{\symbol{45}}group $U$ and a finite dimensional ${\ensuremath{\mathbb Z}} U$ or $FU$ module $A$ where $F$ is a finite field. The algorithm for determining the first cohomology group is
outlined in \cite{Eic00}.
As a preparation for the cohomology computation, we introduce the cohomology
records. These records provide the technical setup for our cohomology
computations.
\section{\textcolor{Chapter }{Cohomology records}}\label{Cohomology records}
\logpage{[ 8, 1, 0 ]}
\hyperdef{L}{X875758FA7C6F5CE1}{}
{
Cohomology records provide the necessary technical setup for the cohomology
computations for polycyclic groups.
\subsection{\textcolor{Chapter }{CRRecordByMats}}
\logpage{[ 8, 1, 1 ]}\nobreak
\hyperdef{L}{X7C97442C7B78806C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{CRRecordByMats({\mdseries\slshape U, mats})\index{CRRecordByMats@\texttt{CRRecordByMats}}
\label{CRRecordByMats}
}\hfill{\scriptsize (function)}}\\
creates an external module. Let \mbox{\texttt{\mdseries\slshape U}} be a pcp group which acts via the list of matrices \mbox{\texttt{\mdseries\slshape mats}} on a vector space of the form ${\ensuremath{\mathbb Z}}^n$ or $\mathbb{F}_p^n$. Then this function creates a record which can be used as input for the
cohomology computations. }
\subsection{\textcolor{Chapter }{CRRecordBySubgroup}}
\logpage{[ 8, 1, 2 ]}\nobreak
\hyperdef{L}{X8646DFA1804D2A11}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{CRRecordBySubgroup({\mdseries\slshape U, A})\index{CRRecordBySubgroup@\texttt{CRRecordBySubgroup}}
\label{CRRecordBySubgroup}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{CRRecordByPcp({\mdseries\slshape U, pcp})\index{CRRecordByPcp@\texttt{CRRecordByPcp}}
\label{CRRecordByPcp}
}\hfill{\scriptsize (function)}}\\
creates an internal module. Let \mbox{\texttt{\mdseries\slshape U}} be a pcp group and let \mbox{\texttt{\mdseries\slshape A}} be a normal elementary or free abelian normal subgroup of \mbox{\texttt{\mdseries\slshape U}} or let \mbox{\texttt{\mdseries\slshape pcp}} be a pcp of a normal elementary of free abelian subfactor of \mbox{\texttt{\mdseries\slshape U}}. Then this function creates a record which can be used as input for the
cohomology computations.
The returned cohomology record \mbox{\texttt{\mdseries\slshape C}} contains the following entries:
\begin{description}
\item[{\mbox{\texttt{\mdseries\slshape factor}}}] a pcp of the acting group. If the module is external, then this is \mbox{\texttt{\mdseries\slshape Pcp(U)}}. If the module is internal, then this is \mbox{\texttt{\mdseries\slshape Pcp(U, A)}} or \mbox{\texttt{\mdseries\slshape Pcp(U, GroupOfPcp(pcp))}}.
\item[{\mbox{\texttt{\mdseries\slshape mats}}, \mbox{\texttt{\mdseries\slshape invs}} and \mbox{\texttt{\mdseries\slshape one}}}] the matrix action of \mbox{\texttt{\mdseries\slshape factor}} with acting matrices, their inverses and the identity matrix.
\item[{\mbox{\texttt{\mdseries\slshape dim}} and \mbox{\texttt{\mdseries\slshape char}}}] the dimension and characteristic of the matrices.
\item[{\mbox{\texttt{\mdseries\slshape relators}} and \mbox{\texttt{\mdseries\slshape enumrels}}}] the right hand sides of the polycyclic relators of \mbox{\texttt{\mdseries\slshape factor}} as generator exponents lists and a description for the corresponding left hand
sides.
\item[{\mbox{\texttt{\mdseries\slshape central}}}] is true, if the matrices \mbox{\texttt{\mdseries\slshape mats}} are all trivial. This is used locally for efficiency reasons.
\end{description}
And additionally, if $C$ defines an internal module, then it contains:
\begin{description}
\item[{\mbox{\texttt{\mdseries\slshape group}}}] the original group \mbox{\texttt{\mdseries\slshape U}}.
\item[{\mbox{\texttt{\mdseries\slshape normal}}}] this is either \mbox{\texttt{\mdseries\slshape Pcp(A)}} or the input \mbox{\texttt{\mdseries\slshape pcp}}.
\item[{\mbox{\texttt{\mdseries\slshape extension}}}] information on the extension of \mbox{\texttt{\mdseries\slshape A}} by \mbox{\texttt{\mdseries\slshape U/A}}.
\end{description}
}
}
\section{\textcolor{Chapter }{Cohomology groups}}\label{Cohomology groups}
\logpage{[ 8, 2, 0 ]}
\hyperdef{L}{X874759D582393441}{}
{
Let $U$ be a pcp\texttt{\symbol{45}}group and $A$ a free or elementary abelian pcp\texttt{\symbol{45}}group and a $U$\texttt{\symbol{45}}module. By $Z^i(U, A)$ be denote the group of $i$\texttt{\symbol{45}}th cocycles and by $B^i(U, A)$ the $i$\texttt{\symbol{45}}th coboundaries. The factor $Z^i(U,A) / B^i(U,A)$ is the $i$\texttt{\symbol{45}}th cohomology group. Since $A$ is elementary or free abelian, the groups $Z^i(U, A)$ and $B^i(U, A)$ are elementary or free abelian groups as well.
The \textsf{Polycyclic} package provides methods to compute first and second cohomology group for a
polycyclic group \mbox{\texttt{\mdseries\slshape U}}. We write all involved groups additively and we use an explicit description
by bases for them. Let $C$ be the cohomology record corresponding to $U$ and $A$.
Let $f_1, \ldots, f_n$ be the elements in the entry $factor$ of the cohomology record $C$. Then we use the following embedding of the first cocycle group to describe
1\texttt{\symbol{45}}cocycles and 1\texttt{\symbol{45}}coboundaries: $Z^1(U, A) \to A^n : \delta \mapsto (\delta(f_1), \ldots, \delta(f_n))$
For the second cohomology group we recall that each element of $Z^2(U, A)$ defines an extension $H$ of $A$ by $U$. Thus there is a pc\texttt{\symbol{45}}presentation of $H$ extending the pc\texttt{\symbol{45}}presentation of $U$ given by the record $C$. The extended presentation is defined by tails in $A$; that is, each relator in the record entry $relators$ is extended by an element of $A$. The concatenation of these tails yields a vector in $A^l$ where $l$ is the length of the record entry $relators$ of $C$. We use these tail vectors to describe $Z^2(U, A)$ and $B^2(U, A)$. Note that this description is dependent on the chosen presentation in $C$. However, the factor $Z^2(U, A)/ B^2(U, A)$ is independent of the chosen presentation.
The following functions are available to compute explicitly the first and
second cohomology group as described above.
\subsection{\textcolor{Chapter }{OneCoboundariesCR}}
\logpage{[ 8, 2, 1 ]}\nobreak
\hyperdef{L}{X85EF170387D39D4A}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OneCoboundariesCR({\mdseries\slshape C})\index{OneCoboundariesCR@\texttt{OneCoboundariesCR}}
\label{OneCoboundariesCR}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OneCocyclesCR({\mdseries\slshape C})\index{OneCocyclesCR@\texttt{OneCocyclesCR}}
\label{OneCocyclesCR}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{TwoCoboundariesCR({\mdseries\slshape C})\index{TwoCoboundariesCR@\texttt{TwoCoboundariesCR}}
\label{TwoCoboundariesCR}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{TwoCocyclesCR({\mdseries\slshape C})\index{TwoCocyclesCR@\texttt{TwoCocyclesCR}}
\label{TwoCocyclesCR}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OneCohomologyCR({\mdseries\slshape C})\index{OneCohomologyCR@\texttt{OneCohomologyCR}}
\label{OneCohomologyCR}
}\hfill{\scriptsize (function)}}\\
\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{TwoCohomologyCR({\mdseries\slshape C})\index{TwoCohomologyCR@\texttt{TwoCohomologyCR}}
\label{TwoCohomologyCR}
}\hfill{\scriptsize (function)}}\\
The first four functions return bases of the corresponding group. The last two
functions need to describe a factor of additive abelian groups. They return
the following descriptions for these factors.
\begin{description}
\item[{\mbox{\texttt{\mdseries\slshape gcc}}}] the basis of the cocycles of \mbox{\texttt{\mdseries\slshape C}}.
\item[{\mbox{\texttt{\mdseries\slshape gcb}}}] the basis of the coboundaries of \mbox{\texttt{\mdseries\slshape C}}.
\item[{\mbox{\texttt{\mdseries\slshape factor}}}] a description of the factor of cocycles by coboundaries. Usually, it would be
most convenient to use additive mappings here. However, these are not
available in case that \mbox{\texttt{\mdseries\slshape A}} is free abelian and thus we use a description of this additive map as record.
This record contains
\begin{description}
\item[{\mbox{\texttt{\mdseries\slshape gens}}}] a base for the image.
\item[{\mbox{\texttt{\mdseries\slshape rels}}}] relative orders for the image.
\item[{\mbox{\texttt{\mdseries\slshape imgs}}}] the images for the elements in \mbox{\texttt{\mdseries\slshape gcc}}.
\item[{\mbox{\texttt{\mdseries\slshape prei}}}] preimages for the elements in \mbox{\texttt{\mdseries\slshape gens}}.
\item[{\mbox{\texttt{\mdseries\slshape denom}}}] the kernel of the map; that is, another basis for \mbox{\texttt{\mdseries\slshape gcb}}.
\end{description}
\end{description}
There is an additional function which can be used to compute the second
cohomology group over an arbitrary finitely generated abelian group. The
finitely generated abelian group should be realized as a factor of a free
abelian group modulo a lattice. The function is called as }
\subsection{\textcolor{Chapter }{TwoCohomologyModCR}}
\logpage{[ 8, 2, 2 ]}\nobreak
\hyperdef{L}{X79B48D697A8A84C8}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{TwoCohomologyModCR({\mdseries\slshape C, lat})\index{TwoCohomologyModCR@\texttt{TwoCohomologyModCR}}
\label{TwoCohomologyModCR}
}\hfill{\scriptsize (function)}}\\
where \mbox{\texttt{\mdseries\slshape C}} is a cohomology record and \mbox{\texttt{\mdseries\slshape lat}} is a basis for a sublattice of a free abelian module. The output format is the
same as for \texttt{TwoCohomologyCR}. }
}
\section{\textcolor{Chapter }{Extended 1\texttt{\symbol{45}}cohomology}}\label{Extended 1-cohomology}
\logpage{[ 8, 3, 0 ]}
\hyperdef{L}{X79610E9178BD0C54}{}
{
In some cases more information on the first cohomology group is of interest.
In particular, if we have an internal module given and we want to compute the
complements using the first cohomology group, then we need additional
information. This extended version of first cohomology is obtained by the
following functions.
\subsection{\textcolor{Chapter }{OneCoboundariesEX}}
\logpage{[ 8, 3, 1 ]}\nobreak
\hyperdef{L}{X7E87E3EA81C84621}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OneCoboundariesEX({\mdseries\slshape C})\index{OneCoboundariesEX@\texttt{OneCoboundariesEX}}
\label{OneCoboundariesEX}
}\hfill{\scriptsize (function)}}\\
returns a record consisting of the entries
\begin{description}
\item[{\mbox{\texttt{\mdseries\slshape basis}}}] a basis for $B^1(U, A) \leq A^n$.
\item[{\mbox{\texttt{\mdseries\slshape transf}}}] There is a derivation mapping from $A$ to $B^1(U,A)$. This mapping is described here as transformation from $A$ to \mbox{\texttt{\mdseries\slshape basis}}.
\item[{\mbox{\texttt{\mdseries\slshape fixpts}}}] the fixpoints of $A$. This is also the kernel of the derivation mapping.
\end{description}
}
\subsection{\textcolor{Chapter }{OneCocyclesEX}}
\logpage{[ 8, 3, 2 ]}\nobreak
\hyperdef{L}{X8111D2087C16CC0C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OneCocyclesEX({\mdseries\slshape C})\index{OneCocyclesEX@\texttt{OneCocyclesEX}}
\label{OneCocyclesEX}
}\hfill{\scriptsize (function)}}\\
returns a record consisting of the entries
\begin{description}
\item[{\mbox{\texttt{\mdseries\slshape basis}}}] a basis for $Z^1(U, A) \leq A^n$.
\item[{\mbox{\texttt{\mdseries\slshape transl}}}] a special solution. This is only of interest in case that $C$ is an internal module and in this case it gives the translation vector in $A^n$ used to obtain complements corresponding to the elements in $basis$. If $C$ is not an internal module, then this vector is always the zero vector.
\end{description}
}
\subsection{\textcolor{Chapter }{OneCohomologyEX}}
\logpage{[ 8, 3, 3 ]}\nobreak
\hyperdef{L}{X84718DDE792FB212}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{OneCohomologyEX({\mdseries\slshape C})\index{OneCohomologyEX@\texttt{OneCohomologyEX}}
\label{OneCohomologyEX}
}\hfill{\scriptsize (function)}}\\
returns the combined information on the first cohomology group. }
}
\section{\textcolor{Chapter }{Extensions and Complements}}\label{Extensions and Complements}
\logpage{[ 8, 4, 0 ]}
\hyperdef{L}{X853E51787A24AE00}{}
{
The natural applications of first and second cohomology group is the
determination of extensions and complements. Let $C$ be a cohomology record.
\subsection{\textcolor{Chapter }{ ComplementCR}}
\logpage{[ 8, 4, 1 ]}\nobreak
\hyperdef{L}{X7DA9162085058006}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ ComplementCR({\mdseries\slshape C, c})\index{ ComplementCR@\texttt{ ComplementCR}}
\label{ ComplementCR}
}\hfill{\scriptsize (function)}}\\
returns the complement corresponding to the 1\texttt{\symbol{45}}cocycle \mbox{\texttt{\mdseries\slshape c}}. In the case that \mbox{\texttt{\mdseries\slshape C}} is an external module, we construct the split extension of $U$ with $A$ first and then determine the complement. In the case that \mbox{\texttt{\mdseries\slshape C}} is an internal module, the vector \mbox{\texttt{\mdseries\slshape c}} must be an element of the affine space corresponding to the complements as
described by \texttt{OneCocyclesEX}. }
\subsection{\textcolor{Chapter }{ ComplementsCR}}
\logpage{[ 8, 4, 2 ]}\nobreak
\hyperdef{L}{X7F8984D386A813D6}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ ComplementsCR({\mdseries\slshape C})\index{ ComplementsCR@\texttt{ ComplementsCR}}
\label{ ComplementsCR}
}\hfill{\scriptsize (function)}}\\
returns all complements using the correspondence to $Z^1(U,A)$. Further, this function returns fail, if $Z^1(U,A)$ is infinite. }
\subsection{\textcolor{Chapter }{ ComplementClassesCR}}
\logpage{[ 8, 4, 3 ]}\nobreak
\hyperdef{L}{X7FAB3EB0803197FA}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ ComplementClassesCR({\mdseries\slshape C})\index{ ComplementClassesCR@\texttt{ ComplementClassesCR}}
\label{ ComplementClassesCR}
}\hfill{\scriptsize (function)}}\\
returns complement classes using the correspondence to $H^1(U,A)$. Further, this function returns fail, if $H^1(U,A)$ is infinite. }
\subsection{\textcolor{Chapter }{ ComplementClassesEfaPcps}}
\logpage{[ 8, 4, 4 ]}\nobreak
\hyperdef{L}{X8759DC59799DD508}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ ComplementClassesEfaPcps({\mdseries\slshape U, N, pcps})\index{ ComplementClassesEfaPcps@\texttt{ ComplementClassesEfaPcps}}
\label{ ComplementClassesEfaPcps}
}\hfill{\scriptsize (function)}}\\
Let $N$ be a normal subgroup of $U$. This function returns the complement classes to $N$ in $U$. The classes are computed by iteration over the $U$\texttt{\symbol{45}}invariant efa series of $N$ described by \mbox{\texttt{\mdseries\slshape pcps}}. If at some stage in this iteration infinitely many complements are
discovered, then the function returns fail. (Even though there might be only
finitely many conjugacy classes of complements to $N$ in $U$.) }
\subsection{\textcolor{Chapter }{ ComplementClasses}}
\logpage{[ 8, 4, 5 ]}\nobreak
\hyperdef{L}{X7B0EC76D81A056AB}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ ComplementClasses({\mdseries\slshape [V, ]U, N})\index{ ComplementClasses@\texttt{ ComplementClasses}}
\label{ ComplementClasses}
}\hfill{\scriptsize (function)}}\\
Let $N$ and $U$ be normal subgroups of $V$ with $N \leq U \leq V$. This function attempts to compute the $V$\texttt{\symbol{45}}conjugacy classes of complements to $N$ in $U$. The algorithm proceeds by iteration over a $V$\texttt{\symbol{45}}invariant efa series of $N$. If at some stage in this iteration infinitely many complements are
discovered, then the algorithm returns fail. }
\subsection{\textcolor{Chapter }{ExtensionCR}}
\logpage{[ 8, 4, 6 ]}\nobreak
\hyperdef{L}{X85F3B55C78CF840B}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ExtensionCR({\mdseries\slshape C, c})\index{ExtensionCR@\texttt{ExtensionCR}}
\label{ExtensionCR}
}\hfill{\scriptsize (function)}}\\
returns the extension corresponding to the 2\texttt{\symbol{45}}cocycle $c$. }
\subsection{\textcolor{Chapter }{ExtensionsCR}}
\logpage{[ 8, 4, 7 ]}\nobreak
\hyperdef{L}{X81DC85907E0948FD}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ExtensionsCR({\mdseries\slshape C})\index{ExtensionsCR@\texttt{ExtensionsCR}}
\label{ExtensionsCR}
}\hfill{\scriptsize (function)}}\\
returns all extensions using the correspondence to $Z^2(U,A)$. Further, this function returns fail, if $Z^2(U,A)$ is infinite. }
\subsection{\textcolor{Chapter }{ExtensionClassesCR}}
\logpage{[ 8, 4, 8 ]}\nobreak
\hyperdef{L}{X7AE16E3687E14B24}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{ExtensionClassesCR({\mdseries\slshape C})\index{ExtensionClassesCR@\texttt{ExtensionClassesCR}}
\label{ExtensionClassesCR}
}\hfill{\scriptsize (function)}}\\
returns extension classes using the correspondence to $H^2(U,A)$. Further, this function returns fail, if $H^2(U,A)$ is infinite. }
\subsection{\textcolor{Chapter }{SplitExtensionPcpGroup}}
\logpage{[ 8, 4, 9 ]}\nobreak
\hyperdef{L}{X7986997B78AD3292}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SplitExtensionPcpGroup({\mdseries\slshape U, mats})\index{SplitExtensionPcpGroup@\texttt{SplitExtensionPcpGroup}}
\label{SplitExtensionPcpGroup}
}\hfill{\scriptsize (function)}}\\
returns the split extension of \mbox{\texttt{\mdseries\slshape U}} by the $U$\texttt{\symbol{45}}module described by \mbox{\texttt{\mdseries\slshape mats}}. }
}
\section{\textcolor{Chapter }{Constructing pcp groups as extensions}}\label{Constructing pcp groups as extensions}
\logpage{[ 8, 5, 0 ]}
\hyperdef{L}{X823771527DBD857D}{}
{
This section contains an example application of the second cohomology group to
the construction of pcp groups as extensions. The following constructs
extensions of the group of upper unitriangular matrices with its natural
lattice.
\begin{Verbatim}[commandchars=@|A,fontsize=\small,frame=single,label=Example]
# get the group and its matrix action
@gapprompt|gap>A @gapinput|G := UnitriangularPcpGroup(3,0);A
Pcp-group with orders [ 0, 0, 0 ]
@gapprompt|gap>A @gapinput|mats := G!.mats;A
[ [ [ 1, 1, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],
[ [ 1, 0, 0 ], [ 0, 1, 1 ], [ 0, 0, 1 ] ],
[ [ 1, 0, 1 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ] ]
# set up the cohomology record
@gapprompt|gap>A @gapinput|C := CRRecordByMats(G,mats);;A
# compute the second cohomology group
@gapprompt|gap>A @gapinput|cc := TwoCohomologyCR(C);;A
# the abelian invariants of H^2(G,M)
@gapprompt|gap>A @gapinput|cc.factor.rels;A
[ 2, 0, 0 ]
# construct an extension which corresponds to a cocycle that has
# infinite image in H^2(G,M)
@gapprompt|gap>A @gapinput|c := cc.factor.prei[2];A
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 1 ]
@gapprompt|gap>A @gapinput|H := ExtensionCR( C, c);A
Pcp-group with orders [ 0, 0, 0, 0, 0, 0 ]
# check that the extension does not split - get the normal subgroup
@gapprompt|gap>A @gapinput|N := H!.module;A
Pcp-group with orders [ 0, 0, 0 ]
# create the interal module
@gapprompt|gap>A @gapinput|C := CRRecordBySubgroup(H,N);;A
# use the complements routine
@gapprompt|gap>A @gapinput|ComplementClassesCR(C);A
[ ]
\end{Verbatim}
}
}
\chapter{\textcolor{Chapter }{Matrix Representations}}\label{Matrix Representations}
\logpage{[ 9, 0, 0 ]}
\hyperdef{L}{X858D1BB07A8FBF87}{}
{
This chapter describes functions which compute with matrix representations for
pcp\texttt{\symbol{45}}groups. So far the routines in this package are only
able to compute matrix representations for torsion\texttt{\symbol{45}}free
nilpotent groups.
\section{\textcolor{Chapter }{Unitriangular matrix groups}}\label{Unitriangular matrix groups}
\logpage{[ 9, 1, 0 ]}
\hyperdef{L}{X7D0ED06C7E6A457D}{}
{
\subsection{\textcolor{Chapter }{UnitriangularMatrixRepresentation}}
\logpage{[ 9, 1, 1 ]}\nobreak
\hyperdef{L}{X7E6F320F865E309C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{UnitriangularMatrixRepresentation({\mdseries\slshape G})\index{UnitriangularMatrixRepresentation@\texttt{UnitriangularMatrixRepresentation}}
\label{UnitriangularMatrixRepresentation}
}\hfill{\scriptsize (operation)}}\\
computes a faithful representation of a torsion\texttt{\symbol{45}}free
nilpotent group \mbox{\texttt{\mdseries\slshape G}} as unipotent lower triangular matrices over the integers. The
pc\texttt{\symbol{45}}presentation for \mbox{\texttt{\mdseries\slshape G}} must not contain any power relations. The algorithm is described in \cite{dGN02}. }
\subsection{\textcolor{Chapter }{IsMatrixRepresentation}}
\logpage{[ 9, 1, 2 ]}\nobreak
\hyperdef{L}{X7F5E7F5F7DDB2E2C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsMatrixRepresentation({\mdseries\slshape G, matrices})\index{IsMatrixRepresentation@\texttt{IsMatrixRepresentation}}
\label{IsMatrixRepresentation}
}\hfill{\scriptsize (function)}}\\
checks if the map defined by mapping the $i$\texttt{\symbol{45}}th generator of the pcp\texttt{\symbol{45}}group \mbox{\texttt{\mdseries\slshape G}} to the $i$\texttt{\symbol{45}}th matrix of \mbox{\texttt{\mdseries\slshape matrices}} defines a homomorphism. }
}
\section{\textcolor{Chapter }{Upper unitriangular matrix groups}}\label{Upper unitriangular matrix groups}
\logpage{[ 9, 2, 0 ]}
\hyperdef{L}{X79A8A51B84E4BF8C}{}
{
We call a matrix upper unitriangular if it is an upper triangular matrix with
ones on the main diagonal. The weight of an upper unitriangular matrix is the
number of diagonals above the main diagonal that contain zeroes only.
The subgroup of all upper unitriangular matrices of $GL(n,{\ensuremath{\mathbb Z}})$ is torsion\texttt{\symbol{45}}free nilpotent. The $k$\texttt{\symbol{45}}th term of its lower central series is the set of all
matrices of weight $k-1$. The ${\ensuremath{\mathbb Z}}$\texttt{\symbol{45}}rank of the $k$\texttt{\symbol{45}}th term of the lower central series modulo the $(k+1)$\texttt{\symbol{45}}th term is $n-k$.
\subsection{\textcolor{Chapter }{IsomorphismUpperUnitriMatGroupPcpGroup}}
\logpage{[ 9, 2, 1 ]}\nobreak
\hyperdef{L}{X8434972E7DDB68C1}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{IsomorphismUpperUnitriMatGroupPcpGroup({\mdseries\slshape G})\index{IsomorphismUpperUnitriMatGroupPcpGroup@\texttt{Isomorphism}\-\texttt{Upper}\-\texttt{Unitri}\-\texttt{Mat}\-\texttt{Group}\-\texttt{Pcp}\-\texttt{Group}}
\label{IsomorphismUpperUnitriMatGroupPcpGroup}
}\hfill{\scriptsize (function)}}\\
takes a group \mbox{\texttt{\mdseries\slshape G}} generated by upper unitriangular matrices over the integers and computes a
polycyclic presentation for the group. The function returns an isomorphism
from the matrix group to the pcp group. Note that a group generated by upper
unitriangular matrices is necessarily torsion\texttt{\symbol{45}}free
nilpotent. }
\subsection{\textcolor{Chapter }{SiftUpperUnitriMatGroup}}
\logpage{[ 9, 2, 2 ]}\nobreak
\hyperdef{L}{X843C9D427FFA2487}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SiftUpperUnitriMatGroup({\mdseries\slshape G})\index{SiftUpperUnitriMatGroup@\texttt{SiftUpperUnitriMatGroup}}
\label{SiftUpperUnitriMatGroup}
}\hfill{\scriptsize (function)}}\\
takes a group \mbox{\texttt{\mdseries\slshape G}} generated by upper unitriangular matrices over the integers and returns a
recursive data structure \mbox{\texttt{\mdseries\slshape L}} with the following properties: \mbox{\texttt{\mdseries\slshape L}} contains a polycyclic generating sequence for \mbox{\texttt{\mdseries\slshape G}}, using \mbox{\texttt{\mdseries\slshape L}} one can decide if a given upper unitriangular matrix is contained in \mbox{\texttt{\mdseries\slshape G}}, a given element of \mbox{\texttt{\mdseries\slshape G}} can be written as a word in the polycyclic generating sequence. \mbox{\texttt{\mdseries\slshape L}} is a representation of a chain of subgroups of \mbox{\texttt{\mdseries\slshape G}} refining the lower centrals series of \mbox{\texttt{\mdseries\slshape G}}.. It contains for each subgroup in the chain a minimal generating set. }
\subsection{\textcolor{Chapter }{RanksLevels}}
\logpage{[ 9, 2, 3 ]}\nobreak
\hyperdef{L}{X7CF8B8F981931846}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{RanksLevels({\mdseries\slshape L})\index{RanksLevels@\texttt{RanksLevels}}
\label{RanksLevels}
}\hfill{\scriptsize (function)}}\\
takes the data structure returned by \texttt{SiftUpperUnitriMat} and prints the ${\ensuremath{\mathbb Z}}$\texttt{\symbol{45}}rank of each the subgroup in \mbox{\texttt{\mdseries\slshape L}}. }
\subsection{\textcolor{Chapter }{MakeNewLevel}}
\logpage{[ 9, 2, 4 ]}\nobreak
\hyperdef{L}{X81F3760186734EA7}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{MakeNewLevel({\mdseries\slshape m})\index{MakeNewLevel@\texttt{MakeNewLevel}}
\label{MakeNewLevel}
}\hfill{\scriptsize (function)}}\\
creates one level of the data structure returned by \texttt{SiftUpperUnitriMat} and initialises it with weight \mbox{\texttt{\mdseries\slshape m}}. }
\subsection{\textcolor{Chapter }{SiftUpperUnitriMat}}
\logpage{[ 9, 2, 5 ]}\nobreak
\hyperdef{L}{X851A216C85B74574}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{SiftUpperUnitriMat({\mdseries\slshape gens, level, M})\index{SiftUpperUnitriMat@\texttt{SiftUpperUnitriMat}}
\label{SiftUpperUnitriMat}
}\hfill{\scriptsize (function)}}\\
takes the generators \mbox{\texttt{\mdseries\slshape gens}} of an upper unitriangular group, the data structure returned \mbox{\texttt{\mdseries\slshape level}} by \texttt{SiftUpperUnitriMat} and another upper unitriangular matrix \mbox{\texttt{\mdseries\slshape M}}. It sift \mbox{\texttt{\mdseries\slshape M}} through \mbox{\texttt{\mdseries\slshape level}} and adds \mbox{\texttt{\mdseries\slshape M}} at the appropriate place if \mbox{\texttt{\mdseries\slshape M}} is not contained in the subgroup represented by \mbox{\texttt{\mdseries\slshape level}}.
The function \texttt{SiftUpperUnitriMatGroup} illustrates the use of \texttt{SiftUpperUnitriMat}.
\begin{Verbatim}[commandchars=!@|,fontsize=\small,frame=single,label=Example]
InstallGlobalFunction( "SiftUpperUnitriMatGroup", function( G )
local firstlevel, g;
firstlevel := MakeNewLevel( 0 );
for g in GeneratorsOfGroup(G) do
SiftUpperUnitriMat( GeneratorsOfGroup(G), firstlevel, g );
od;
return firstlevel;
end );
\end{Verbatim}
}
\subsection{\textcolor{Chapter }{DecomposeUpperUnitriMat}}
\logpage{[ 9, 2, 6 ]}\nobreak
\hyperdef{L}{X86D711217C639C2C}{}
{\noindent\textcolor{FuncColor}{$\triangleright$\enspace\texttt{DecomposeUpperUnitriMat({\mdseries\slshape level, M})\index{DecomposeUpperUnitriMat@\texttt{DecomposeUpperUnitriMat}}
\label{DecomposeUpperUnitriMat}
}\hfill{\scriptsize (function)}}\\
takes the data structure \mbox{\texttt{\mdseries\slshape level}} returned by \texttt{SiftUpperUnitriMatGroup} and a upper unitriangular matrix \mbox{\texttt{\mdseries\slshape M}} and decomposes \mbox{\texttt{\mdseries\slshape M}} into a word in the polycyclic generating sequence of \mbox{\texttt{\mdseries\slshape level}}. }
}
}
\appendix
\chapter{\textcolor{Chapter }{Obsolete Functions and Name Changes}}\label{app:Obsolete}
\logpage{[ "A", 0, 0 ]}
\hyperdef{L}{X874ECE907CAF380D}{}
{
Over time, the interface of \textsf{Polycyclic} has changed. This was done to get the names of \textsf{Polycyclic} functions to agree with the general naming conventions used throughout GAP.
Also, some \textsf{Polycyclic} operations duplicated functionality that was already available in the core of
GAP under a different name. In these cases, whenever possible we now install
the \textsf{Polycyclic} code as methods for the existing GAP operations instead of introducing new
operations.
For backward compatibility, we still provide the old, obsolete names as
aliases. However, please consider switching to the new names as soon as
possible. The old names may be completely removed at some point in the future.
The following function names were changed.
\index{SchurCovering@\texttt{SchurCovering}} \index{SchurMultPcpGroup@\texttt{SchurMultPcpGroup}} \begin{center}
\begin{tabular}{l|l}\emph{OLD}&
\emph{NOW USE}\\
\hline
\texttt{SchurCovering}&
\texttt{SchurCover} (\ref{SchurCover})\\
\texttt{SchurMultPcpGroup}&
\texttt{AbelianInvariantsMultiplier} (\ref{AbelianInvariantsMultiplier})\\
\end{tabular}\\[2mm]
\end{center}
}
\def\bibname{References\logpage{[ "Bib", 0, 0 ]}
\hyperdef{L}{X7A6F98FD85F02BFE}{}
}
\bibliographystyle{alpha}
\bibliography{polycyclicbib.xml}
\addcontentsline{toc}{chapter}{References}
\def\indexname{Index\logpage{[ "Ind", 0, 0 ]}
\hyperdef{L}{X83A0356F839C696F}{}
}
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{Index}
\printindex
\immediate\write\pagenrlog{["Ind", 0, 0], \arabic{page},}
\newpage
\immediate\write\pagenrlog{["End"], \arabic{page}];}
\immediate\closeout\pagenrlog
\end{document}
|