Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 4183461[1X4 Resolutions of Crystallographic Groups[0X234[1X4.1 Fundamental Domains[0X56Let S be a crystallographic group. A Fundamental domain is a closed convex7set containing a system of representatives for the Orbits of S in its8natural action on euclidian space.9There are two algorithms for calculating fundamental domains in [5XHAPcryst[0m.10One uses the geometry and relies on having the standard rule for evaluating11the scalar product (i.e. the gramian matrix is the identity). The other one12is independent of the gramian matrix but does only work for Bieberbach13groups, while the first ("geometric") algorithm works for arbitrary14crystallographic groups given a point with trivial stabilizer.1516[1X4.1-1 FundamentalDomainStandardSpaceGroup[0m1718[2X> FundamentalDomainStandardSpaceGroup( [0X[3X[v, ]G[0X[2X ) ______________________[0Xmethod19[2X> FundamentalDomainStandardSpaceGroup( [0X[3Xv, G[0X[2X ) ________________________[0Xmethod20[6XReturns:[0X a [9XPolymakeObject[0m2122Let [3XG[0m be an [9XAffineCrystGroupOnRight[0m and [3Xv[0m a vector. A fundamental domain23containing [3Xv[0m is calculated and returned as a [9XPolymakeObject[0m. The vector [3Xv[0m is24used as the starting point for a Dirichlet-Voronoi construction. If no [3Xv[0m is25given, the origin is used as starting point if it has trivial stabiliser.26Otherwise an error is cast.2728[4X--------------------------- Example ----------------------------[0X29[4Xgap> fd:=FundamentalDomainStandardSpaceGroup([1/2,0,1/5],SpaceGroup(3,9));[0X30[4X<polymake object>[0X31[4Xgap> Polymake(fd,"N_VERTICES");[0X32[4X24[0X33[4Xgap> fd:=FundamentalDomainStandardSpaceGroup(SpaceGroup(3,9));[0X34[4X<polymake object>[0X35[4Xgap> Polymake(fd,"N_VERTICES");[0X36[4X8[0X37[4X------------------------------------------------------------------[0X3839[1X4.1-2 FundamentalDomainBieberbachGroup[0m4041[2X> FundamentalDomainBieberbachGroup( [0X[3XG[0X[2X ) ______________________________[0Xmethod42[2X> FundamentalDomainBieberbachGroup( [0X[3Xv, G[, gram][0X[2X ) ___________________[0Xmethod43[6XReturns:[0X a [9XPolymakeObject[0m4445Given a starting vector [3Xv[0m and a Bieberbach group [3XG[0m in standard form, this46method calculates the Dirichlet domain with respect to [3Xv[0m. If [3Xgram[0m is not47supplied, the average gramian matrix is used (see48[2XGramianOfAverageScalarProductFromFiniteMatrixGroup[0m ([14X2.3-1[0m)). It is not49tested if [3Xgram[0m is symmetric and positive definite. It is also not tested, if50the product defined by [3Xgram[0m is invariant under the point group of [3XG[0m.5152The behaviour of this function is influenced by the option [9XineqThreshold[0m.53The algorithm calculates approximations to a fundamental domain by54iteratively adding inequalities. For an approximating polyhedron, every55vertex is tested to find new inequalities. When all vertices have been56considered or the number of new inequalities already found exceeds the value57of [9XineqThreshold[0m, a new approximating polyhedron in calculated. The default58for [9XineqThreshold[0m is 200. Roughly speaking, a large threshold means shifting59work from [9Xpolymake[0m to [5XGAP[0m, a small one means more calls of (and work for)60[9Xpolymake[0m.6162If the value of [2XInfoHAPcryst[0m ([14X1.3-1[0m) is 2 or more, for each approximation63the number of vertices of the approximation, the number of vertices that64have to be considered during the calculation, the number of facets, and new65inequalities is shown.6667Note that the algorithm chooses vertices in random order and also writes68inequalities for [9Xpolymake[0m in random order.6970[4X--------------------------- Example ----------------------------[0X71[4Xgap> a0:=[[ 1, 0, 0, 0, 0, 0, 0 ], [ 0, -1, 0, 0, 0, 0, 0 ], [0X72[4X> [ 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0 ], [0X73[4X> [ 0, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, -1, -1, 0 ],[0X74[4X> [ -1/2, 0, 0, 1/6, 0, 0, 1 ] [0X75[4X> ];;[0X76[4Xgap> a1:=[[ 0, -1, 0, 0, 0, 0, 0 ],[ 0, 0, -1, 0, 0, 0, 0 ],[0X77[4X> [ 1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 1, 0, 0, 0 ], [0X78[4X> [ 0, 0, 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 0 ],[0X79[4X> [ 0, 0, 0, 0, 1/3, -1/3, 1 ] [0X80[4X> ];;[0X81[4Xgap> trans:=List(Group((1,2,3,4,5,6)),g->[0X82[4X> TranslationOnRightFromVector(Permuted([1,0,0,0,0,0],g)));;[0X83[4Xgap> S:=AffineCrystGroupOnRight(Concatenation(trans,[a0,a1]));[0X84[4X<matrix group with 8 generators>[0X85[4Xgap> SetInfoLevel(InfoHAPcryst,2);[0X86[4Xgap> FundamentalDomainBieberbachGroup(S:ineqThreshold:=10);[0X87[4X#I v: 104/104 f:15[0X88[4X#I new: 201[0X89[4X#I v: 961/961 f:58[0X90[4X#I new: 20[0X91[4X#I v: 1143/805 f:69[0X92[4X#I new: 12[0X93[4X#I v: 1059/555 f:64[0X94[4X#I new: 15[0X95[4X#I v: 328/109 f:33[0X96[4X#I new: 12[0X97[4X#I v: 336/58 f:32[0X98[4X#I new: 0[0X99[4X<polymake object>[0X100[4Xgap> FundamentalDomainBieberbachGroup(S:ineqThreshold:=1000);[0X101[4X#I v: 104/104 f:15[0X102[4X#I new: 149[0X103[4X#I v: 635/635 f:41[0X104[4X#I new: 115[0X105[4X#I v: 336/183 f:32[0X106[4X#I new: 0[0X107[4X#I out of inequalities[0X108[4X<polymake object>[0X109[4X------------------------------------------------------------------[0X110111[1X4.1-3 FundamentalDomainFromGeneralPointAndOrbitPartGeometric[0m112113[2X> FundamentalDomainFromGeneralPointAndOrbitPartGeometric( [0X[3Xv, orbit[0X[2X ) _[0Xmethod114[6XReturns:[0X a [9XPolymakeObject[0m115116This uses an alternative algorithm based on geometric considerations. It is117not used in any of the high-level methods. Let [3Xv[0m be a vector and [3Xorbit[0m a118sufficiently large part of the orbit of [3Xv[0m under a crystallographic group119with standard- orthogonal point group (satisfying A^t=A^-1). A geometric120algorithm is then used to calculate the Dirichlet domain with respect to [3Xv[0m.121This also works for crystallographic groups which are not Bieberbach. The122point [3Xv[0m has to have trivial stabilizer.123The intersection of the full orbit with the unit cube around [3Xv[0m is124sufficiently large.125126[4X--------------------------- Example ----------------------------[0X127[4Xgap> G:=SpaceGroup(3,9);;[0X128[4Xgap> v:=[0,0,0];[0X129[4X[ 0, 0, 0 ][0X130[4Xgap> orbit:=OrbitStabilizerInUnitCubeOnRight(G,v).orbit;[0X131[4X[ [ 0, 0, 0 ], [ 0, 0, 1/2 ] ][0X132[4Xgap> fd:=FundamentalDomainFromGeneralPointAndOrbitPartGeometric(v,orbit);[0X133[4X<polymake object>[0X134[4Xgap> Polymake(fd,"N_VERTICES");[0X135[4X8[0X136[4X------------------------------------------------------------------[0X137138[1X4.1-4 IsFundamentalDomainStandardSpaceGroup[0m139140[2X> IsFundamentalDomainStandardSpaceGroup( [0X[3Xpoly, G[0X[2X ) ___________________[0Xmethod141[6XReturns:[0X true or false142143This tests if a [9XPolymakeObject[0m [3Xpoly[0m is a fundamental domain for the affine144crystallographic group [3XG[0m in standard form.145The function tests the following: First, does the orbit of any vertex of146[3Xpoly[0m have a point inside [3Xpoly[0m (if this is the case, [10Xfalse[0m is returned).147Second: Is every facet of [3Xpoly[0m the image of a different facet under a group148element which does not fix [3Xpoly[0m. If this is satisfied, [10Xtrue[0m is returned.149150[1X4.1-5 IsFundamentalDomainBieberbachGroup[0m151152[2X> IsFundamentalDomainBieberbachGroup( [0X[3Xpoly, G[0X[2X ) ______________________[0Xmethod153[6XReturns:[0X true, false or fail154155This tests if a [9XPolymakeObject[0m [3Xpoly[0m is a fundamental domain for the affine156crystallographic group [3XG[0m in standard form and if this group is torsion free157(ie a Bieberbach group)158It returns [9Xtrue[0m if [3XG[0m is torsion free and [3Xpoly[0m is a fundamental domain for [3XG[0m.159If [3Xpoly[0m is not a fundamental domain, [9Xfalse[0m is returned regardless of the160structure of [3XG[0m. And if [3XG[0m is not torsion free, the method returns [9Xfail[0m. If [3XG[0m161is polycyclic, torsion freeness is tested using a representation as pcp162group. Otherwise the stabilisers of the faces of the fundamental domain [3Xpoly[0m163are calculated ([3XG[0m is torsion free if and only if it all these stabilisers164are trivial).165166167[1X4.2 Face Lattice and Resolution[0X168169For Bieberbach groups (torsion free crystallographic groups), the following170functions calcualte free resolutions. This calculation is done by finding a171fundamental domain for the group. For a description of the [9XHapResolution[0m172datatype, see the [5XHap[0m data types documentation or the experimental datatypes173documentation [14XHAPprog: Resolutions in Hap[0m174175[1X4.2-1 ResolutionBieberbachGroup[0m176177[2X> ResolutionBieberbachGroup( [0X[3XG[, v][0X[2X ) ________________________________[0Xmethod178[6XReturns:[0X a [9XHAPresolution[0m179180Let [3XG[0m be a Bieberbach group given as an [9XAffineCrystGroupOnRight[0m and [3Xv[0m a181vector. Then a Dirichlet domain with respect to [3Xv[0m is calculated using182[2XFundamentalDomainBieberbachGroup[0m ([14X4.1-2[0m). From this domain, a resolution is183calculated using [2XFaceLatticeAndBoundaryBieberbachGroup[0m ([14X4.2-2[0m) and184[2XResolutionFromFLandBoundary[0m ([14X4.2-3[0m). If [3Xv[0m is not given, the origin is used.185186[4X--------------------------- Example ----------------------------[0X187[4Xgap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9));[0X188[4XResolution of length 3 in characteristic[0X189[4X0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) .[0X190[4XNo contracting homotopy available.[0X191[4X[0X192[4Xgap> List([0..3],Dimension(R));[0X193[4X[ 1, 3, 3, 1 ][0X194[4Xgap> R:=ResolutionBieberbachGroup(SpaceGroup(3,9),[1/2,0,0]);[0X195[4XResolution of length 3 in characteristic[0X196[4X0 for SpaceGroupOnRightBBNWZ( 3, 2, 2, 2, 2 ) .[0X197[4XNo contracting homotopy available.[0X198[4X[0X199[4Xgap> List([0..3],Dimension(R));[0X200[4X[ 6, 12, 7, 1 ][0X201[4X[0X202[4X------------------------------------------------------------------[0X203204[1X4.2-2 FaceLatticeAndBoundaryBieberbachGroup[0m205206[2X> FaceLatticeAndBoundaryBieberbachGroup( [0X[3Xpoly, group[0X[2X ) _______________[0Xmethod207[6XReturns:[0X Record with entries [9X.hasse[0m and [9X.elts[0m representing a part of the208hasse diagram and a lookup table of group elements209210Let [3Xgroup[0m be a torsion free [9XAffineCrystGroupOnRight[0m (that is, a Bieberbach211group). Given a [9XPolymakeObject[0m [3Xpoly[0m representing a fundamental domain for212[3Xgroup[0m, this method uses [5Xpolymaking[0m to calculate the face lattice of [3Xpoly[0m.213From the set of faces, a system of representatives for [3Xgroup[0m- orbits is214chosen. For each representative, the boundary is then calculated. The list215[9X.elts[0m contains elements of [3Xgroup[0m (in fact, it is even a set). The structure216of the returned list [9X.hasse[0m is as follows:217218-- The i-th entry contains a system of representatives for the i-1219dimensional faces of [3Xpoly[0m.220221-- Each face is represented by a pair of lists [10X[vertices,boundary][0m. The222list of integers [10Xvertices[0m represents the vertices of [3Xpoly[0m which are223contained in this face. The enumeration is chosen such that an [10Xi[0m in224the list represents the i-th entry of the list225[10XPolymake(poly,"VERTICES");[0m226227-- The list [10Xboundary[0m represents the boundary of the respective face. It228is a list of pairs of integers [10X[j,g][0m. The first entry lies between -n229and n, where n is the number of faces of dimension i-1. This entry230represents a face of dimension i-1 (or its additive inverse as a231module generator). The second entry [10Xg[0m is the position of the matrix in232[9X.elts[0m.233234This representation is compatible with the representation of free Z G235modules in [5XHap[0m and this method essentially calculates a free resolution of236[3Xgroup[0m. If the value of [2XInfoHAPcryst[0m ([14X1.3-1[0m) is 2 or more, additional237information about the number of faces in every codimension, the number of238orbits of the group on the free module generated by those faces, and the239time it took to calculate the orbit decomposition is output.240241[4X--------------------------- Example ----------------------------[0X242[4Xgap> SetInfoLevel(InfoHAPcryst,2);[0X243[4Xgap> G:=SpaceGroup(3,165);[0X244[4XSpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 )[0X245[4Xgap> fd:=FundamentalDomainBieberbachGroup(G);[0X246[4X<polymake object>[0X247[4Xgap> fl:=FaceLatticeAndBoundaryBieberbachGroup(fd,G);;[0X248[4X#I 1(4/8): 0:00:00.004[0X249[4X#I 2(5/18): 0:00:00.000[0X250[4X#I 3(2/12): 0:00:00.000[0X251[4X#I Face lattice done ( 0:00:00.004). Calculating boundary[0X252[4X#I done ( 0:00:00.004) Reformating...[0X253[4Xgap> RecNames(fl);[0X254[4X[ "hasse", "elts", "groupring" ][0X255[4Xgap> fl.groupring;[0X256[4X<free left module over Integers, and ring-with-one, with 10 generators>[0X257[4X------------------------------------------------------------------[0X258259[1X4.2-3 ResolutionFromFLandBoundary[0m260261[2X> ResolutionFromFLandBoundary( [0X[3Xfl, group[0X[2X ) ___________________________[0Xmethod262[6XReturns:[0X Free resolution263264If [3Xfl[0m is the record output by [2XFaceLatticeAndBoundaryBieberbachGroup[0m ([14X4.2-2[0m)265and [3Xgroup[0m is the corresponding group, this function returns a [9XHapResolution[0m.266Of course, [3Xfl[0m has to be generated from a fundamental domain for [3Xgroup[0m267268[4X--------------------------- Example ----------------------------[0X269[4Xgap> G:=SpaceGroup(3,165);[0X270[4XSpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 )[0X271[4Xgap> fd:=FundamentalDomainBieberbachGroup(G);[0X272[4X<polymake object>[0X273[4Xgap> fl:=FaceLatticeAndBoundaryBieberbachGroup(fd,G);;[0X274[4Xgap> ResolutionFromFLandBoundary(fl,G);[0X275[4XResolution of length 3 in characteristic[0X276[4X0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) .[0X277[4XNo contracting homotopy available.[0X278[4X[0X279[4Xgap> ResolutionFromFLandBoundary(fl,G);[0X280[4XResolution of length 3 in characteristic[0X281[4X0 for SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 ) .[0X282[4XNo contracting homotopy available.[0X283[4X[0X284[4Xgap> List([0..4],Dimension(last));[0X285[4X[ 2, 5, 4, 1, 0 ][0X286[4X------------------------------------------------------------------[0X287288289290