Content deleted Content added
→External links: Corrected Github link |
m →[[Euclidean ring]]: Tag Bare URLs using AWB |
||
(17 intermediate revisions by 12 users not shown) | |||
Line 1:
{{About|a software package|other uses|Gap (disambiguation)}}
{{use dmy dates|date=
{{infobox software
| name = GAP
Line 15:
* [[University of Kaiserslautern|TU Kaiserslautern]]
}}
| released = 1988
| latest release version = {{wikidata|property|reference|P348}}
| latest release date = {{start date and age|{{wikidata|qualifier|P348|P577}}}}
| programming language = [[C (programming language)|C]]
| operating_system = [[Cross-platform]]
Line 25 ⟶ 26:
}}
'''GAP''' ([[Group (mathematics)|Groups]], [[Algorithm]]s and [[Computer programming|Programming]]) is
==History==
GAP was developed at Lehrstuhl D für Mathematik (LDFM), [[RWTH Aachen University|Rheinisch-Westfälische Technische Hochschule Aachen]], [[Germany]] from [[1986]] to [[1997]]. After the retirement of [[Joachim Neubüser]] from the chair of LDFM, the development and maintenance of GAP was coordinated by the School of Mathematical and Computational Sciences at the [[University of St Andrews]], [[Scotland]].<ref>{{cite web|url=https://www.gap-system.org/Doc/History/history.html|title=Some history of GAP|website=Official GAP website|access-date=September 27, 2019}}</ref> In the summer of 2005 coordination was transferred to an equal partnership of four 'GAP Centres', located at the
==Features==
GAP contains a [[Procedural programming|procedural programming language]] and a large collection of functions to create and manipulate various mathematical objects. It supports integers and rational numbers of arbitrary size, memory permitting. [[Finite group|Finite groups]] can be defined as [[Permutation group|groups of permutations]] and it is also possible to define [[Finitely-presented group|finitely presented groups]] by specifying generators and relations. Several databases of important finite groups are included. GAP also allows to work with [[Matrix (mathematics)|matrices]] and with [[Finite field|finite fields]] (which are represented using [[Conway polynomial (finite fields)|Conway polynomials]]). [[Ring (mathematics)|Rings]], [[Module (mathematics)|modules]] and [[Lie algebra|Lie algebras]] are also supported.
==Distribution==
GAP and its sources, including packages (sets of user contributed programs), data library (including a [[list of small groups]]) and the manual, are distributed freely, subject to "[[copyleft]]" conditions. GAP runs on any [[Unix]] system, under [[Microsoft Windows|Windows]], and on [[
The user contributed packages are an important feature of the system, adding a great deal of functionality. GAP offers package authors the opportunity to submit these packages for a process of [[peer review]], hopefully improving the quality of the final packages, and providing recognition akin to an academic publication for their authors. {{As of|2021|03}}, there are 151 packages distributed with GAP, of which approximately 71 have been through this process.
Line 38 ⟶ 42:
==Sample session==
=== [[Permutation group]] ===
<pc group of size 8 with 3 generators>▼
{{sxhl|lang=gap-console|1=
<span style="color: darkblue;">gap></span> <span style="color: #B60000;">i:=IsomorphismPermGroup(G);</span> <span style="color: darkgray;"># Find an isomorphism from G to a group of permutations.</span>▼
gap> G:=SmallGroup(8,1); # Set G to be the 1st group (in GAP catalogue) of order 8.
<action isomorphism>▼
▲
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> Image(i,G); # Generators for the image of G under i - written as products of disjoint cyclic permutations.
<nowiki>[ (), (1,2)(3,4)(5,6)(7,8), (1,3,2,4)(5,7,6,8), (1,4,2,3)(5,8,6,7), ▼
gap> Elements(Image(i,G)); # All the elements of im G.
▲
}}
=== [[Euclidean ring]] ===
{{sxhl|lang=gap-console|1=
gap> # test consistency of EuclideanDegree, EuclideanQuotient, EuclideanRemainder,
gap> # and QuotientRemainder for some ring and elements of it
gap> checkEuclideanRing :=
> function(R, colls...)
> local coll1, coll2, a, b, deg_b, deg_r, q, r, qr;
> if Length(colls) >= 1 then coll1:=colls[1];
> elif Size(R) <= 100 then coll1 := R;
> else coll1 := List([1..100],i->Random(R));
> fi;
> if Length(colls) >= 2 then coll2:=colls[2];
> elif Size(R) <= 100 then coll2 := R;
> else coll2 := List([1..100],i->Random(R));
> fi;
> for b in coll1 do
> if IsZero(b) then continue; fi;
> deg_b := EuclideanDegree(R, b);
> for a in coll2 do
> q := EuclideanQuotient(R, a, b); Assert(0, q in R);
> r := EuclideanRemainder(R, a, b); Assert(0, r in R);
> if a <> q*b + r then Error("a <> q*b + r for ", [R,a,b]); fi;
> deg_r := EuclideanDegree(R, r);
> if not IsZero(r) and deg_r >= deg_b then Error("Euclidean degree did not decrease for ",[R,a,b]); fi;
> qr := QuotientRemainder(R, a, b);
> if qr <> [q, r] then Error("QuotientRemainder inconsistent for ", [R,a,b]); fi;
> od;
> od;
> return true;
> end;;
gap> # rings in characteristic 0
gap> checkEuclideanRing(Integers,[-100..100],[-100..100]);
true
gap> checkEuclideanRing(Rationals);
true
gap> checkEuclideanRing(GaussianIntegers);
true
gap> checkEuclideanRing(GaussianRationals);
true
gap> # finite fields
gap> ForAll(Filtered([2..50], IsPrimePowerInt), q->checkEuclideanRing(GF(q)));
true
gap> # ZmodnZ
gap> ForAll([1..50], m -> checkEuclideanRing(Integers mod m));
true
gap> checkEuclideanRing(Integers mod ((2*3*5)^2));
true
gap> checkEuclideanRing(Integers mod ((2*3*5)^3));
true
gap> checkEuclideanRing(Integers mod ((2*3*5*7)^2));
true
gap> checkEuclideanRing(Integers mod ((2*3*5*7)^3));
true
}}<ref>https://pygments.org/docs/lexers/#pygments.lexers.algebra.GAPConsoleLexer {{Bare URL inline|date=August 2025}}</ref>
==See also==
Line 56 ⟶ 122:
==External links==
* {{Official website|
* {{GitHub|
{{Computer algebra systems}}
Line 63 ⟶ 129:
{{DEFAULTSORT:Gap Computer Algebra System}}
[[Category:Computer algebra system software for Linux]]
[[Category:Computer algebra system software for
[[Category:Computer algebra system software for Windows]]
[[Category:Free computer algebra systems]]
|