GAP (数式処理システム)

GAP (ギャップ、Groups, Algorithms and Programming) は計算機で群を扱うために開発された計算機代数システムである。
歴史.
アーヘン工科大学の数学部D (Lehrstuhl D für Mathematik, LDFM) で開発が始まり、その後スコットランドのセント・アンドルーズ大学の数学情報科学部と共同で開発が行われた。2005年の夏に開発拠点はそれぞれ同等の4カ所 (英セント・アンドルーズ大学、独アーヘン工科大学、 独ブラウンシュヴァイク工科大学、米フォート・コリンズのコロラド州立大学) に増やされた。
配布.
GAP の配布パッケージには、そのソースの他に、多くの利用者から寄贈されたプログラム、データライブラリ、マニュアルが含まれており、GPL にしたがって自由に再配布することができる。GAP はどの Unix系 OS でも実行でき、また Windows や macOS でも利用できる。GAP の標準的な構成では約 300 MB である (すべてのパッケージをインストールする場合は 400 MB である)。GAP を実行するには、RAM は 128 MB あれば十分である。
利用者の寄贈によるパッケージにより多くの機能が提供されており、これは GAP の大きな特徴の一つであると言える。開発者の元に送られてきたパッケージは査読プロセスにより GAP システムの機能や品質向上に有用かどうかが判断される。パッケージの作成者が論文を投稿する場合と同じである。2006年8月現在、GAP の配布パッケージにはそういったパッケージが 58 含まれており、35 のパッケージが査読を経たものである。
GAP からSINGULAR を使うためのインターフェイスが用意されている。
使用例.
 gap> G:=SmallGroup(8,1); # 変数 G を位数 8 の有限群（の一つ）と定義する。
 <pc group of size 8 with 3 generators>
 gap> i:=IsomorphismPermGroup(G); # G から置換群への同型写像を得る。
 <action isomorphism>
 gap> Image(i,G); # i の下での G の像 - それらは im G の生成元を成す。
 Group([ (1,5,3,7,2,6,4,8), (1,3,2,4)(5,7,6,8), (1,2)(3,4)(5,6)(7,8) ])
 gap> Elements(Image(i,G)); # im G のすべての元を得る。
 [ (), (1,2)(3,4)(5,6)(7,8), (1,3,2,4)(5,7,6,8), (1,4,2,3)(5,8,6,7), 
 (1,5,3,7,2,6,4,8), (1,6,3,8,2,5,4,7), (1,7,4,5,2,8,3,6), (1,8,4,6,2,7,3,5) ]