GAP (“Gruppen Algorithmen Programmierung”) ist ein Spezialprogramm für Diskrete Algebra (also nicht für Messdatenverarbeitung. Fourieranalyse, Fliesskommaberechnungen usw.) mit Schwerpunkt in Gruppentheorie und verwandten Bereichen. Es ist frei (Opensource und Copyleft) und wird international in der mathematischen Forschung eingesetzt. Es läuft unter Unix Derivaten, Windows und Macs. Es kann primär mit Gruppen, Darstellungen, Vektoren, Tensoren, Algebren und Ringen umgehen. Die Funktionalität wird vielen Paketen (packages, Libraries) erweitert; zum Beispiel mit der Small Groups Library (alle Gruppen bis zu einer gewissen Grösse).
GAP kann mit Einschränkungen auch in der Mathematik Software SAGE angesprochen werden, in der standalone und Cloudversion (SAGE Components).
Quelle: http://www.gap-system.org/. Die SW wird mittlerweile an mehreren GAP Centers betreut und weiterentwickelt, zum Beispiel wieder in Aachen. Der Source Code ist auf Github.
GAP sollte in wissenschaftlichen Artikeln wie folgt zitiert werden (BiBTeX)
@manual{GAP4, key = "GAP", organization = "The GAP~Group", title = "{GAP -- Groups, Algorithms, and Programming, Version 4.8.4}", year = 2016, url = "\verb+(http://www.gap-system.org)+", }
Anleitungen und Tutorien
Der Funktionsumfang von GAP ist riesig und wohl kaum ein Mathematiker kennt mehr als einen kleinen Bruchteil seiner Fähigkeiten.
- http://www.math.colostate.edu/~hulpke/paper/gap4tut.pdf
- GAP Referenz
- Frage können im Forum Math Stackexchange gestellt werden (nicht nur zu GAP)
Einfache Anwendung: Primfaktorzerlegung:
gap> FactorsInt( 10^42 + 1 ); [ 29, 101, 281, 9901, 226549, 121499449, 4458192223320340849 ]
Studenten der Algebra kennen und lieben die Sylow Gruppen:
gap> g:=SymmetricGroup(4);; gap> SylowSubgroup(g,2); Group([ (1,2), (3,4), (1,3)(2,4) ])
oder die Konjugationsklassen:
gap> s8:=SymmetricGroup(8); Sym( [ 1 .. 8 ] ) gap> Size(ConjugacyClass(a8, (1,2)(3,4)(5,6)(7,8) )); 105
Anwendungsbeispiel
Die Analyse des Rubik’s Cube ist ein schönes Anwendungsbeispiel (Link). Die 6 Drehungen einer Seite erzeugen eine Gruppe:
gap> cube := Group( > ( 1, 3, 8, 6)( 2, 5, 7, 4)( 9,33,25,17)(10,34,26,18)(11,35,27,19), > ( 9,11,16,14)(10,13,15,12)( 1,17,41,40)( 4,20,44,37)( 6,22,46,35), > (17,19,24,22)(18,21,23,20)( 6,25,43,16)( 7,28,42,13)( 8,30,41,11), > (25,27,32,30)(26,29,31,28)( 3,38,43,19)( 5,36,45,21)( 8,33,48,24), > (33,35,40,38)(34,37,39,36)( 3, 9,46,32)( 2,12,47,29)( 1,14,48,27), > (41,43,48,46)(42,45,47,44)(14,22,30,38)(15,23,31,39)(16,24,32,40) ); <permutation group with 6 generators>
Die Ordnung ist:
gap> Size( cube ); 43252003274489856000