  
  [1X3 [33X[0;0YIncidence Geometry[133X[101X
  
  [33X[0;0YWe  follow  [BC13]  for the definitions of incidence structure and incidence
  geometry.  An [13Xincidence structure[113X consists of a set of elements, a symmetric
  relation  on the elements and a type function from the set of elements to an
  index  set  (i.e., every element has a ``type''). It satisfies the following
  axiom:  [13X(i)  no  two  elements  of  the same type are incident.[113X An incidence
  structure  without  type  function is in fact a multipartite graph where the
  adjacency  is  the  incidence  (so  with  a  loop  on each vertex). The term
  geometry,  or  incidence  geometry,  is interpreted broadly in this package.
  Particularly, an [13Xincidence geometry[113X is an incidence structure satisfying the
  following  axiom:  [13X(ii) every maximal flag contains an element of each type[113X.
  In  graph  terminology,  this  means  that  every maximal clique contains an
  element  of  each  type. Thus, a projective 5-space is an incidence geometry
  with five types of elements: points, lines, planes, solids, and hyperplanes.
  A finite classical polar space of rank 3 is an incidence geometry with three
  types  of  elements:  points, lines, and planes. Depending on the viewpoint,
  the  Grassmann variety of the lines of a projective 4-space, is an incidence
  structure that is not an incidence geometry.[133X
  
  [33X[0;0Y[5XFinInG[105X  concerns  itself  primarily with the most commonly studied incidence
  geometries  of  rank at least 2: projective spaces, polar spaces, and affine
  spaces. Throughout, no matter the geometry, we have made the convention that
  an element of type 1 is a ``point'', an element of type 2 is a ``line'', and
  so  forth.  The examples we use in this section use projective spaces, which
  have  not  yet  been  introduced  to  the reader in this manual. For further
  information on projective spaces, see Chapter [14X4[114X.[133X
  
  [33X[0;0YIn  this  chapter  we  describe functionality that is [12Xdeclared[112X for incidence
  structures,  which  does  not imply that operations described here will work
  for  arbitrary user-constructed incidence structures. Its aim is furthermore
  to  allow  the  user  to  become familiar with the general philosophy of the
  package,  using  examples  that are self-explanatory. Not all details of the
  commands  used  in the examples will be explained in this chapter, therefore
  we refer to the relevant chapter for the commands. These can easily be found
  using the index.[133X
  
  
  [1X3.1 [33X[0;0YIncidence structures[133X[101X
  
  [33X[0;0YIncidence structures can be more general than incidence geometries, e.g., if
  they do not satisfy axiom (ii) mentioned above. We allow the construction of
  such objects. This explains one of the top level categories in [5XFinInG[105X.[133X
  
  [1X3.1-1 IsIncidenceStructure[101X
  
  [29X[2XIsIncidenceStructure[102X[32X Category
  
  [33X[0;0YTop level category for all objects representing an incidence structure.[133X
  
  [1X3.1-2 IsIncidenceGeometry[101X
  
  [29X[2XIsIncidenceGeometry[102X[32X Category
  
  [33X[0;0YCategory  for all objects representing an incidence geometry. All particular
  geometries implemented in [5XFinInG[105X are incidence geometries.[133X
  
  [1X3.1-3 IncidenceStructure[101X
  
  [29X[2XIncidenceStructure[102X( [3Xeles[103X, [3Xinc_rel[103X, [3Xtype[103X, [3Xtypeset[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan incidence structure[133X
  
  [33X[0;0Y[3Xeles[103X  is  a  set containing the elements of the incidence structure. [3Xinc_rel[103X
  must  be  a function that determines whether two objects in the set [3Xeles[103X are
  incident.  [3Xtype[103X  is  a  function mapping any element to its type, which is a
  unique element in the set [3Xtypeset[103X.[133X
  
  [33X[0;0YIn  the  following  example  we define an incidence structure that is not an
  incidence  geometry.  The  example  used  is  the  incidence  structure with
  elements  the  subspaces contained in the line Grassmannian of PG(4,2). This
  example is not meant to create this incidence structure in an efficient way,
  but just to demonstrate the general philosophy.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(4,2);[127X[104X
    [4X[28XProjectiveSpace(4, 2)[128X[104X
    [4X[25Xgap>[125X [27Xpg2 := PG(9,2);[127X[104X
    [4X[28XProjectiveSpace(9, 2)[128X[104X
    [4X[25Xgap>[125X [27Xpoints := List(Lines(pg),x->VectorSpaceToElement(pg2,GrassmannCoordinates(x)));;[127X[104X
    [4X[25Xgap>[125X [27Xflags := Concatenation(List(Points(pg),x->List(Planes(x),y->FlagOfIncidenceStructure(pg,[x,y]))));;[127X[104X
    [4X[25Xgap>[125X [27Xprelines := List(flags,flag->ShadowOfFlag(pg,flag,2));;[127X[104X
    [4X[25Xgap>[125X [27Xlines := List(prelines,x->VectorSpaceToElement(pg2,List(x,y->GrassmannCoordinates(y))));;[127X[104X
    [4X[25Xgap>[125X [27Xflags2 := Concatenation(List(Points(pg),x->List(Solids(x),y->FlagOfIncidenceStructure(pg,[x,y]))));;[127X[104X
    [4X[25Xgap>[125X [27Xpreplanes := List(flags2,flag->ShadowOfFlag(pg,flag,2));;[127X[104X
    [4X[25Xgap>[125X [27Xplanes := List(preplanes,x->VectorSpaceToElement(pg2,List(x,y->GrassmannCoordinates(y))));;[127X[104X
    [4X[25Xgap>[125X [27Xmaximals1 := List(Planes(pg),x->VectorSpaceToElement(pg2,List(Lines(x),y->GrassmannCoordinates(y))));;[127X[104X
    [4X[25Xgap>[125X [27Xmaximals2 := List(Points(pg),x->VectorSpaceToElement(pg2,List(Lines(x),y->GrassmannCoordinates(y))));;[127X[104X
    [4X[25Xgap>[125X [27Xelements := Union(points,lines,planes,maximals1,maximals2);;[127X[104X
    [4X[25Xgap>[125X [27XLength(elements);[127X[104X
    [4X[28X1891[128X[104X
    [4X[25Xgap>[125X [27Xtype := x -> ProjectiveDimension(x)+1;[127X[104X
    [4X[28Xfunction( x ) ... end[128X[104X
    [4X[25Xgap>[125X [27Xinc_rel := \*;[127X[104X
    [4X[28X<Operation "*">[128X[104X
    [4X[25Xgap>[125X [27Xinc := IncidenceStructure(elements,inc_rel,type,[1,2,3,4]);[127X[104X
    [4X[28XIncidence structure of rank 4[128X[104X
    [4X[25Xgap>[125X [27XRank(inc);[127X[104X
    [4X[28X4[128X[104X
    [4X[28X[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YLie  Geometries,  i.e., geometries with a projective space as ambient space,
  affine  spaces  and generalised polygons have their own category, which is a
  subcategory of [10XIsIncidenceGeometry[110X.[133X
  
  
  [1X3.1-4 [33X[0;0YMain categories in [10XIsIncidenceGeometry[110X[101X[1X[133X[101X
  
  [29X[2XIsLieGeometry[102X[32X Category
  [29X[2XIsAffineSpace[102X[32X Category
  [29X[2XIsGeneralisedPolygon[102X[32X Category
  [29X[2XIsCosetGeometry[102X[32X Category
  
  [33X[0;0YWithin  each  category, several subcategories are declared. Subcategories of
  [10XIsLieGeometry[110X   are   discussed   in   Section   [14X3.6[114X  and  subcategories  of
  [10XIsGeneralisedPolygon[110X are discussed in Chapter [14X12[114X[133X
  
  
  [1X3.1-5 [33X[0;0YExamples of categories of incidence geometries[133X[101X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(ProjectiveSpace(5,7));[127X[104X
    [4X[28X[ "IsIncidenceStructure", "IsIncidenceGeometry", "IsLieGeometry", [128X[104X
    [4X[28X  "IsProjectiveSpace" ][128X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(HermitianPolarSpace(5,9));[127X[104X
    [4X[28X[ "IsIncidenceStructure", "IsIncidenceGeometry", "IsLieGeometry", [128X[104X
    [4X[28X  "IsClassicalPolarSpace", "IsAlgebraicVariety", "IsProjectiveVariety", [128X[104X
    [4X[28X  "IsHermitianVariety" ][128X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(AffineSpace(3,3));[127X[104X
    [4X[28X[ "IsIncidenceStructure", "IsIncidenceGeometry", "IsAffineSpace" ][128X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(SymplecticSpace(3,11));[127X[104X
    [4X[28X[ "IsIncidenceStructure", "IsIncidenceGeometry", "IsLieGeometry", [128X[104X
    [4X[28X  "IsClassicalPolarSpace", "IsGeneralisedPolygon", "IsGeneralisedQuadrangle", [128X[104X
    [4X[28X  "IsClassicalGQ" ][128X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(SplitCayleyHexagon(9));[127X[104X
    [4X[28X[ "IsIncidenceStructure", "IsIncidenceGeometry", "IsLieGeometry", [128X[104X
    [4X[28X  "IsGeneralisedPolygon", "IsGeneralisedHexagon", [128X[104X
    [4X[28X  "IsClassicalGeneralisedHexagon" ][128X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(ParabolicQuadric(4,16));[127X[104X
    [4X[28X[ "IsIncidenceStructure", "IsIncidenceGeometry", "IsLieGeometry", [128X[104X
    [4X[28X  "IsClassicalPolarSpace", "IsGeneralisedPolygon", "IsGeneralisedQuadrangle", [128X[104X
    [4X[28X  "IsClassicalGQ", "IsAlgebraicVariety", "IsProjectiveVariety" ][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.1-6 TypesOfElementsOfIncidenceStructure[101X
  
  [29X[2XTypesOfElementsOfIncidenceStructure[102X( [3Xinc[103X ) [32X attribute
  [29X[2XTypesOfElementsOfIncidenceStructurePlural[102X( [3Xinc[103X ) [32X attribute
  [6XReturns:[106X  [33X[0;10Ya list of strings or integers[133X
  
  [33X[0;0YBoth    attributes    are    declared    for   objects   in   the   category
  [10XIsIncidenceStructure[110X.  Any  incidence structure has a set of types, which is
  usually just the list [22X[1..n][122X. If specific names are given to each type, like
  points,  lines,  etc.,  this  attribute returns the names for the particular
  incidence  structure  [3Xinc[103X. The second variant returns the list of plurals of
  these  names.  For  genericly constructed incidence structures, the names of
  the Elements are also generic: elements of type 1, elements of type 2, etc.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XTypesOfElementsOfIncidenceStructure(ProjectiveSpace(5,4));[127X[104X
    [4X[28X[ "point", "line", "plane", "solid", "proj. 4-space" ][128X[104X
    [4X[25Xgap>[125X [27XTypesOfElementsOfIncidenceStructurePlural(AffineSpace(7,4));[127X[104X
    [4X[28X[ "points", "lines", "planes", "solids", "affine. subspaces of dim. 4", [128X[104X
    [4X[28X  "affine. subspaces of dim. 5", "affine. subspaces of dim. 6" ][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.1-7 Rank[101X
  
  [29X[2XRank[102X( [3Xinc[103X ) [32X operation
  [29X[2XRankAttr[102X( [3Xinc[103X ) [32X attribute
  [6XReturns:[106X  [33X[0;10Yrank  of  [3Xinc[103X,  an  object  which  must  belong  to  the  category
            [10XIsIncidenceStructure[110X[133X
  
  [33X[0;0YThe  operation  [11XRank[111X  returns  the  rank of the incidence structure [10Xinc[110X. The
  highest level method for [11XRank[111X, applicable to objects in [10XIsIncidenceStructure[110X
  simply refers to the attribute [11XRankAttr[111X. In [5XFinInG[105X, the rank of an incidence
  structure is determined upon creation, when also [11XRankAttr[111X is set.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XRank(ProjectiveSpace(5,5));[127X[104X
    [4X[28X5[128X[104X
    [4X[25Xgap>[125X [27XRank(AffineSpace(3,5));[127X[104X
    [4X[28X3[128X[104X
    [4X[25Xgap>[125X [27XRank(SymplecticSpace(5,5));[127X[104X
    [4X[28X3[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.1-8 IncidenceGraph[101X
  
  [29X[2XIncidenceGraph[102X( [3Xinc[103X ) [32X attribute
  [6XReturns:[106X  [33X[0;10Ya graph[133X
  
  [33X[0;0YThe  vertices  are the elements of [3Xinc[103X, adjacency between different vertices
  is  equal  to  incidence,  and  there  are  of  course no loops. For generic
  incidence  structures, i.e. constructed through [11XIncidenceStructure[111X, there is
  no efficient method installed, so this operation can be time consuming.[133X
  
  [33X[0;0YIf   [3Xinc[103X   is   a   generic   incidence   structure,   i.e.   created  using
  [11XIncidenceStructure[111X, the vertex names of the graph are integers. It is not by
  default possible to use the elements of [3Xinc[103X as vertex names, since it is not
  known  in the generic case whether the elements of different type of [3Xinc[103X can
  be  ordered.  For  particular  incidence geometries, e.g. projective spaces,
  etc.,  the  vertex  names  will  be the elements, which will be demonstrated
  through examples in the appropriate chapters.[133X
  
  [33X[0;0YIn   the  example  we  consider  the  so-called  doubling  of  the  smallest
  generalised quadrangle: the points of the incidence structure are the points
  and  the  lines  of the GQ, the lines of the incidence structure are all the
  point-line  flags  of  the  GQ. The incidence is the natural one. It is then
  checked  that  diameter  and  girth  of  the  incidence  graph  are 8 and 16
  respectively,  which  makes  that  the  incidence structure is a generalised
  octagon.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := SymplecticSpace(3,2);[127X[104X
    [4X[28XW(3, 2)[128X[104X
    [4X[25Xgap>[125X [27Xpts := List(Points(ps));;[127X[104X
    [4X[25Xgap>[125X [27Xlines := List(Lines(ps));;[127X[104X
    [4X[25Xgap>[125X [27Xflags := Union(List(pts,x->List(Lines(x),y->FlagOfIncidenceStructure(ps,[x,y]))));;[127X[104X
    [4X[25Xgap>[125X [27Xinc := function(x,y)[127X[104X
    [4X[25X>[125X [27Xif x = y then[127X[104X
    [4X[25X>[125X [27X    return true;[127X[104X
    [4X[25X>[125X [27Xelif IsFlagOfIncidenceStructure(x) and IsElementOfIncidenceStructure(y) then[127X[104X
    [4X[25X>[125X [27X    return IsIncident(x,y);[127X[104X
    [4X[25X>[125X [27Xelif IsElementOfIncidenceStructure(x) and IsElementOfIncidenceStructure(y) then[127X[104X
    [4X[25X>[125X [27X    return false;[127X[104X
    [4X[25X>[125X [27Xelif IsFlagOfIncidenceStructure(x) and IsFlagOfIncidenceStructure(y) then   [127X[104X
    [4X[25X>[125X [27X    return false;[127X[104X
    [4X[25X>[125X [27Xelse [127X[104X
    [4X[25X>[125X [27X    return inc(y,x);[127X[104X
    [4X[25X>[125X [27Xfi;[127X[104X
    [4X[25X>[125X [27Xend;[127X[104X
    [4X[28Xfunction( x, y ) ... end[128X[104X
    [4X[25Xgap>[125X [27Xtype := function(x)[127X[104X
    [4X[25X>[125X [27Xif IsList(Type(x)) then[127X[104X
    [4X[25X>[125X [27X    return 2;[127X[104X
    [4X[25X>[125X [27Xelse[127X[104X
    [4X[25X>[125X [27X    return 1;[127X[104X
    [4X[25X>[125X [27Xfi;[127X[104X
    [4X[25X>[125X [27Xend;[127X[104X
    [4X[28Xfunction( x ) ... end[128X[104X
    [4X[25Xgap>[125X [27Xels := Union(pts,lines,flags);;[127X[104X
    [4X[25Xgap>[125X [27Xstruc := IncidenceStructure(els,inc,type,[1,2]);[127X[104X
    [4X[28XIncidence structure of rank 2[128X[104X
    [4X[25Xgap>[125X [27Xgamma := IncidenceGraph(struc);[127X[104X
    [4X[28Xrec( adjacencies := [ [ 31, 32, 33 ], [ 34, 35, 36 ], [ 37, 38, 39 ], [128X[104X
    [4X[28X      [ 40, 41, 42 ], [ 43, 44, 45 ], [ 46, 47, 48 ], [ 49, 50, 51 ], [128X[104X
    [4X[28X      [ 52, 53, 54 ], [ 55, 56, 57 ], [ 58, 59, 60 ], [ 61, 62, 63 ], [128X[104X
    [4X[28X      [ 64, 65, 66 ], [ 67, 68, 69 ], [ 70, 71, 72 ], [ 73, 74, 75 ], [128X[104X
    [4X[28X      [ 31, 40, 43 ], [ 32, 52, 55 ], [ 33, 64, 67 ], [ 34, 41, 46 ], [128X[104X
    [4X[28X      [ 35, 53, 58 ], [ 36, 65, 70 ], [ 37, 42, 49 ], [ 38, 54, 61 ], [128X[104X
    [4X[28X      [ 39, 66, 73 ], [ 44, 59, 74 ], [ 45, 62, 71 ], [ 47, 56, 75 ], [128X[104X
    [4X[28X      [ 50, 57, 72 ], [ 48, 63, 68 ], [ 51, 60, 69 ], [ 1, 16 ], [ 1, 17 ], [128X[104X
    [4X[28X      [ 1, 18 ], [ 2, 19 ], [ 2, 20 ], [ 2, 21 ], [ 3, 22 ], [ 3, 23 ], [128X[104X
    [4X[28X      [ 3, 24 ], [ 4, 16 ], [ 4, 19 ], [ 4, 22 ], [ 5, 16 ], [ 5, 25 ], [128X[104X
    [4X[28X      [ 5, 26 ], [ 6, 19 ], [ 6, 27 ], [ 6, 29 ], [ 7, 22 ], [ 7, 28 ], [128X[104X
    [4X[28X      [ 7, 30 ], [ 8, 17 ], [ 8, 20 ], [ 8, 23 ], [ 9, 17 ], [ 9, 27 ], [128X[104X
    [4X[28X      [ 9, 28 ], [ 10, 20 ], [ 10, 25 ], [ 10, 30 ], [ 11, 23 ], [ 11, 26 ], [128X[104X
    [4X[28X      [ 11, 29 ], [ 12, 18 ], [ 12, 21 ], [ 12, 24 ], [ 13, 18 ], [ 13, 29 ], [128X[104X
    [4X[28X      [ 13, 30 ], [ 14, 21 ], [ 14, 26 ], [ 14, 28 ], [ 15, 24 ], [ 15, 25 ], [128X[104X
    [4X[28X      [ 15, 27 ] ], group := Group(()), isGraph := true, names := [ 1 .. 75 ],[128X[104X
    [4X[28X  order := 75, [128X[104X
    [4X[28X  representatives := [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, [128X[104X
    [4X[28X      17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, [128X[104X
    [4X[28X      35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, [128X[104X
    [4X[28X      53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, [128X[104X
    [4X[28X      71, 72, 73, 74, 75 ], [128X[104X
    [4X[28X  schreierVector := [ -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, [128X[104X
    [4X[28X      -14, -15, -16, -17, -18, -19, -20, -21, -22, -23, -24, -25, -26, -27, [128X[104X
    [4X[28X      -28, -29, -30, -31, -32, -33, -34, -35, -36, -37, -38, -39, -40, -41, [128X[104X
    [4X[28X      -42, -43, -44, -45, -46, -47, -48, -49, -50, -51, -52, -53, -54, -55, [128X[104X
    [4X[28X      -56, -57, -58, -59, -60, -61, -62, -63, -64, -65, -66, -67, -68, -69, [128X[104X
    [4X[28X      -70, -71, -72, -73, -74, -75 ] )[128X[104X
    [4X[25Xgap>[125X [27XDiameter(gamma);[127X[104X
    [4X[28X8[128X[104X
    [4X[25Xgap>[125X [27XGirth(gamma);[127X[104X
    [4X[28X16[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X3.2 [33X[0;0YElements of incidence structures[133X[101X
  
  
  [1X3.2-1 [33X[0;0YMain categories for individual elements of incidence structures[133X[101X
  
  [29X[2XIsElementOfIncidenceStructure[102X[32X Category
  [29X[2XIsElementOfIncidenceGeometry[102X[32X Category
  [29X[2XIsElementOfLieGeometry[102X[32X Category
  [29X[2XIsElementOfAffineSpace[102X[32X Category
  [29X[2XIsElementOfCosetGeometry[102X[32X Category
  [29X[2XIsSubspaceOfProjectiveSpace[102X[32X Category
  [29X[2XIsSubspaceOfClassicalPolarSpace[102X[32X Category
  [29X[2XIsElementOfGeneralisedPolygon[102X[32X Category
  
  [33X[0;0YIn general, elements of an incidence structure belonging to [10XIsIncStr[110X, are in
  the  category  [10XIsElementOfIncStr[110X.  The inclusion for different categories of
  geometries   is   followed   for  their  elements,  with  an  exception  for
  [10XIsSubspaceOfClassicalPolarSpace[110X,     which     is     a    subcategory    of
  [10XIsSubspaceOfProjectiveSpace[110X,    while   [10XIsClassicalPolarSpace[110X   is   not   a
  subcategory of [10XIsProjectiveSpace[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XRandom(Lines(SplitCayleyHexagon(3)));[127X[104X
    [4X[28X#I  for Split Cayley Hexagon[128X[104X
    [4X[28X#I  Computing nice monomorphism...[128X[104X
    [4X[28X#I  Found permutation domain...[128X[104X
    [4X[28X<a line in H(3)>[128X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(last);[127X[104X
    [4X[28X[ "IsElementOfIncidenceStructure", "IsElementOfIncidenceGeometry", [128X[104X
    [4X[28X  "IsElementOfLieGeometry", "IsSubspaceOfProjectiveSpace", [128X[104X
    [4X[28X  "IsSubspaceOfClassicalPolarSpace", "IsElementOfGeneralisedPolygon" ][128X[104X
    [4X[25Xgap>[125X [27XRandom(Solids(AffineSpace(7,17)));[127X[104X
    [4X[28X<a solid in AG(7, 17)>[128X[104X
    [4X[25Xgap>[125X [27XCategoriesOfObject(last);[127X[104X
    [4X[28X[ "IsElementOfIncidenceStructure", "IsElementOfIncidenceGeometry", [128X[104X
    [4X[28X  "IsSubspaceOfAffineSpace" ][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.2-2 UnderlyingObject[101X
  
  [29X[2XUnderlyingObject[102X( [3Xel[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan object[133X
  
  [33X[0;0YAn  element  of  an incidence structure has a type and an underlying object.
  E.g.  a  line  of  a projective space is determined by a two dimensional sub
  vector  space,  which  is  determined  by  a  basis.  Elements  of incidence
  structure  can  also  be  objects  representing  elements of other incidence
  structures,  as is e.g. the case in the example of [14X3.1-3[114X. The examples shows
  the  underlying  objects  of  elements  of three totally different incidence
  geometries.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(2,2);[127X[104X
    [4X[28XProjectiveSpace(2, 2)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(pg));[127X[104X
    [4X[28X<a point in ProjectiveSpace(2, 2)>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingObject(p);[127X[104X
    [4X[28X<cvec over GF(2,1) of length 3>[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(pg));[127X[104X
    [4X[28X<a line in ProjectiveSpace(2, 2)>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingObject(l);[127X[104X
    [4X[28X<cmat 2x3 over GF(2,1)>[128X[104X
    [4X[25Xgap>[125X [27Xmat := [ [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 ], [127X[104X
    [4X[25X>[125X [27X  [ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0 ], [127X[104X
    [4X[25X>[125X [27X  [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1 ] ];[127X[104X
    [4X[28X[ [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 ], [128X[104X
    [4X[28X  [ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27Xgp := GeneralisedPolygonByIncidenceMatrix(mat);[127X[104X
    [4X[28X<generalised quadrangle of order [ 2, 2 ]>[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(gp));[127X[104X
    [4X[28X<a point in <generalised quadrangle of order [ 2, 2 ]>>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingObject(p);[127X[104X
    [4X[28X15[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(gp));[127X[104X
    [4X[28X<a line in <generalised quadrangle of order [ 2, 2 ]>>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingObject(l);[127X[104X
    [4X[28X[ 7, 13, 15 ][128X[104X
    [4X[25Xgap>[125X [27Xegq := EGQByBLTSet(BLTSetByqClan(LinearqClan(3)));[127X[104X
    [4X[28X#I  Now embedding dual BLT-set into W(5,q)...[128X[104X
    [4X[28X#I  Computing elation group...[128X[104X
    [4X[28X<EGQ of order [ 9, 3 ] and basepoint in W(5, 3 ) >[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(egq));[127X[104X
    [4X[28X<a point in <EGQ of order [ 9, 3 ] and basepoint in W(5, 3 ) >>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingObject(p);[127X[104X
    [4X[28X<a point in W(5, 3)>[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.2-3 Type[101X
  
  [29X[2XType[102X( [3Xel[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan integer[133X
  
  [33X[0;0YAn  element  of  an incidence structure has a type and an underlying object.
  Its  type  is always a non-negative integer. This operation returns the type
  of an element.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(2,2);[127X[104X
    [4X[28XProjectiveSpace(2, 2)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(pg));[127X[104X
    [4X[28X<a point in ProjectiveSpace(2, 2)>[128X[104X
    [4X[25Xgap>[125X [27XType(p);[127X[104X
    [4X[28X1[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(pg));[127X[104X
    [4X[28X<a line in ProjectiveSpace(2, 2)>[128X[104X
    [4X[25Xgap>[125X [27XType(l);[127X[104X
    [4X[28X2[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.2-4 ObjectToElement[101X
  
  [29X[2XObjectToElement[102X( [3Xinc[103X, [3Xt[103X, [3Xobj[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan element of the incidence structure [3Xinc[103X[133X
  
  [33X[0;0YIf  [3Xobj[103X  represents  an element of [3Xinc[103X of type [3Xt[103X, this operation returns the
  element.  An  error  (or  no  method found error) is shown when [3Xobj[103X does not
  represent  an  element  of  type  [3Xt[103X.  Note that [11XObjectToElement[111X is a generic
  operation.  Versions  with  a  different  argument  set and even alternative
  operations  exist  for  some  particular  geometries to construct particular
  elements.[133X
  
  
  [1X3.2-5 [33X[0;0YMain categories for collections of all the elements of a given type of[101X
  [1Xan incidence structure[133X[101X
  
  [29X[2XIsElementsOfIncidenceStructure[102X[32X Category
  [29X[2XIsElementsOfIncidenceGeometry[102X[32X Category
  [29X[2XIsElementsOfLieGeometry[102X[32X Category
  [29X[2XIsElementsOfAffineSpace[102X[32X Category
  [29X[2XIsElementsOfCosetGeometry[102X[32X Category
  [29X[2XIsSubspacesOfProjectiveSpace[102X[32X Category
  [29X[2XIsSubspacesOfClassicalPolarSpace[102X[32X Category
  
  [33X[0;0YFor  a given incidence structure, the collection of elements of a given type
  can  be  constructed. constructed here means that an object is returned that
  represents  all  the  elements  of  a  given  type, rather than listing them
  immediately,  to  avoid  long  computation times. Such an abstract object is
  e.g.  used  as a range for In general, the collection of elements of a given
  type  of  an  incidence  structure belonging to [10XIsIncStr[110X, is in the category
  [10XIsElementsOfIncStr[110X.  The inclusion for different categories of geometries is
  followed for their collection of elements of a given type, with an exception
  for    [10XIsSubspacesOfClassicalPolarSpace[110X,   which   is   a   subcategory   of
  [10XIsSubspacesOfProjectiveSpace[110X,   while   [10XIsClassicalPolarSpace[110X   is   not   a
  subcategory of [10XIsProjectiveSpace[110X.[133X
  
  [33X[0;0YThe  object representing the set of elements of a given type can be computed
  using the general operation [11XElementsOfIncidenceStructure[111X.[133X
  
  [1X3.2-6 ElementsOfIncidenceStructure[101X
  
  [29X[2XElementsOfIncidenceStructure[102X( [3Xinc[103X, [3Xj[103X ) [32X operation
  [29X[2XElementsOfIncidenceStructure[102X( [3Xinc[103X, [3Xstr[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ya collection of elements[133X
  
  [33X[0;0Y[3Xinc[103X must be an incidence structure, [3Xj[103X must be a type of element of [3Xinc[103X. This
  function returns all elements of [3Xinc[103X of type [3Xj[103X, and an error is displayed if
  [3Xinc[103X has no elements of type [3Xj[103X. Calling the elements (of a given type) of [3Xinc[103X
  yields  an  object  in  the  category [10XIsElementsOfIncidenceStructure[110X (or the
  appropriate  category  for  projective  spaces  and classical polar spaces),
  which  does  not  imply  that  all  elements  are computed and stored. In an
  alternative form of this function [3Xstr[103X can be one of the strings found in the
  list  obtained  by  calling  [11XTypesOfElementsOfIncidenceStructurePlural(inc)[111X.
  E.g.  for projective spaces, ``points", ``lines", ``planes" or ``solids" are
  the  names  for  elements of type 1,2,3 or 4, respectively, of course if [3Xinc[103X
  has elements of the deduced type.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := ProjectiveSpace(3,3);[127X[104X
    [4X[28XProjectiveSpace(3, 3)[128X[104X
    [4X[25Xgap>[125X [27Xl := ElementsOfIncidenceStructure(ps,2);[127X[104X
    [4X[28X<lines of ProjectiveSpace(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xps := EllipticQuadric(5,9);[127X[104X
    [4X[28XQ-(5, 9)[128X[104X
    [4X[25Xgap>[125X [27Xlines := ElementsOfIncidenceStructure(ps,2);[127X[104X
    [4X[28X<lines of Q-(5, 9)>[128X[104X
    [4X[25Xgap>[125X [27Xplanes := ElementsOfIncidenceStructure(ps,3);[127X[104X
    [4X[28XError, <geo> has no elements of type <j> called from[128X[104X
    [4X[28X<function "unknown">( <arguments> )[128X[104X
    [4X[28X called from read-eval loop at line 12 of *stdin*[128X[104X
    [4X[28Xyou can 'quit;' to quit to outer loop, or[128X[104X
    [4X[28Xyou can 'return;' to continue[128X[104X
    [4X[26Xbrk>[126X [27Xquit;[127X[104X
    [4X[25Xgap>[125X [27Xas := AffineSpace(3,9);[127X[104X
    [4X[28XAG(3, 9)[128X[104X
    [4X[25Xgap>[125X [27Xlines := ElementsOfIncidenceStructure(as,"lines");[127X[104X
    [4X[28X<lines of AG(3, 9)>[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.2-7 ElementsOfIncidenceStructure[101X
  
  [29X[2XElementsOfIncidenceStructure[102X( [3Xinc[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ya collection of elements[133X
  
  [33X[0;0Y[3Xinc[103X  must  be  an  incidence  structure,  then  this  operation  returns the
  collection  of  all elements of [3Xinc[103X. Such a collection can e.g. be the range
  of  a  geometry morphism. Note that this operation has no method for generic
  incidence structures constructed using [11XIncidence Structure[111X.[133X
  
  
  [1X3.2-8 [33X[0;0YShort names for ElementsOfIncidenceStructure[133X[101X
  
  [29X[2XPoints[102X( [3Xinc[103X ) [32X operation
  [29X[2XLines[102X( [3Xinc[103X ) [32X operation
  [29X[2XPlanes[102X( [3Xinc[103X ) [32X operation
  [29X[2XSolids[102X( [3Xinc[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10YThe points, lines, planes, solids, respectively of [3Xinc[103X[133X
  
  [33X[0;0YFor  geometries  in  [10XIsLieGeometry[110X, [10XIsAffineSpace[110X, and [10XIsGeneralisedPolygon[110X,
  the  elements of type 1,2,3,4 respectively are called usually points, lines,
  planes,  solids,  respectively.  These methods are, for such geometries, are
  shortcuts  to  [11XElementsOfIncidenceStructure(inc,j)[111X, with [3Xj[103X equal to 1,2,3,4,
  respectively.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XPoints(HermitianVariety(2,64));[127X[104X
    [4X[28X<points of Hermitian Variety in ProjectiveSpace(2, 64)>[128X[104X
    [4X[25Xgap>[125X [27XLines(EllipticQuadric(5,2));[127X[104X
    [4X[28X<lines of Q-(5, 2)>[128X[104X
    [4X[25Xgap>[125X [27XPlanes(SymplecticSpace(7,3));[127X[104X
    [4X[28X<planes of W(7, 3)>[128X[104X
    [4X[25Xgap>[125X [27XLines(TwistedTrialityHexagon(2^3));[127X[104X
    [4X[28X<lines of T(8, 2)>[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.2-9 NrElementsOfIncidenceStructure[101X
  
  [29X[2XNrElementsOfIncidenceStructure[102X( [3Xinc[103X, [3Xj[103X ) [32X operation
  [29X[2XNrElementsOfIncidenceStructure[102X( [3Xinc[103X, [3Xstr[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ya positive integer[133X
  
  [33X[0;0Y[3Xinc[103X must be an incidence structure, [3Xj[103X must be a type of element of [3Xinc[103X. This
  function  returns  the  number of elements of [3Xinc[103X of type [3Xj[103X, and an error is
  displayed  if [3Xinc[103X has no elements of type [3Xj[103X. In the alternative form of this
  function  [3Xstr[103X  can be one of ``points", ``lines", ``planes" or ``solids" and
  the  function  returns  the  number  of  elements  of  type  1,  2,  3  or 4
  respectively,  of  course  if  [3Xinc[103X  has  elements  of  the deduced type. For
  geometries    in    the    category    [10XIsLieGeometry[110X,   [10XIsAffineSpace[110X,   and
  [10XIsGeneralisedPolygon[110X,  the  number of elements of a given type is known upon
  construction  of the geometry. As such, for these geometries, this operation
  requires no computing time.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps:=ProjectiveSpace(4,3);[127X[104X
    [4X[28XProjectiveSpace(4, 3)[128X[104X
    [4X[25Xgap>[125X [27XNrElementsOfIncidenceStructure(ps, 2);[127X[104X
    [4X[28X1210[128X[104X
    [4X[25Xgap>[125X [27XNrElementsOfIncidenceStructure(ps, "points");[127X[104X
    [4X[28X121[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.2-10 Random[101X
  
  [29X[2XRandom[102X( [3XC[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan element in the collection [3XC[103X[133X
  
  [33X[0;0Y[3XC[103X  is a collection of elements of an incidence structure, i.e., an object in
  the  category [10XIsElementsOfIncidenceStructure[110X. [11XRandom(C)[111X will return a random
  element  in  [3XC[103X provided there is a method installed. The generic method will
  compute all elements in [3XC[103X and return a random member from the list. For e.g.
  Lie geometries, more efficient methods are installed.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xcoll := Hyperplanes(PG(5,7));[127X[104X
    [4X[28X<proj. 4-subspaces of ProjectiveSpace(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27XRandom(coll);[127X[104X
    [4X[28X<a proj. 4-space in ProjectiveSpace(5, 7)>[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.2-11 IsIncident[101X
  
  [29X[2XIsIncident[102X( [3Xu[103X, [3Xv[103X ) [32X operation
  [29X[2X\*[102X( [3Xu[103X, [3Xv[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ytrue or false[133X
  
  [33X[0;0Y[3Xu[103X  and  [3Xv[103X  must be elements of an incidence structure. This function returns
  true  if  and  only  if  [3Xu[103X  is  incident with [3Xv[103X. Recall that [10XIsIncident[110X is a
  symmetric  relation,  while  [10Xin[110X  is  not.  A  method for the operation [11X\*[111X is
  installed,  applicable  to objects in [10XIsElementOfIncidenceStructure[110X. It just
  calls [11XIsIncident[111X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(PG(5,4)));[127X[104X
    [4X[28X<a point in ProjectiveSpace(5, 4)>[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(p));[127X[104X
    [4X[28X<a line in ProjectiveSpace(5, 4)>[128X[104X
    [4X[25Xgap>[125X [27XIsIncident(p,l);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsIncident(l,p);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xp * l;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xl * p;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xp * p;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xl * l;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.2-12 AmbientGeometry[101X
  
  [29X[2XAmbientGeometry[102X( [3Xv[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ythe ambient geometry of the element [3Xv[103X[133X
  
  [33X[0;0YIf [3Xv[103X is an element of an incidence geometry currently implemented in [5XFinInG[105X,
  then  this operation returns the ambient geometry of [3Xv[103X, i.e., in general the
  geometry  in  which [3Xv[103X was created. If an incidence structure is created with
  elements  that  are a subset of elements of another incidence structure, the
  ambient geometry might stay unchanged.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xplane := Random(Planes(HyperbolicQuadric(5,2)));[127X[104X
    [4X[28X<a plane in Q+(5, 2)>[128X[104X
    [4X[25Xgap>[125X [27XAmbientGeometry(plane);[127X[104X
    [4X[28XQ+(5, 2)[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(SplitCayleyHexagon(3)));[127X[104X
    [4X[28X#I  for Split Cayley Hexagon[128X[104X
    [4X[28X#I  Computing nice monomorphism...[128X[104X
    [4X[28X#I  Found permutation domain...[128X[104X
    [4X[28X<a line in H(3)>[128X[104X
    [4X[25Xgap>[125X [27XPrint(l);[127X[104X
    [4X[28XNewMatrix(IsCMatRep,GF(3,1),7,[[ Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3), 0*Z(3), [128X[104X
    [4X[28X  Z(3)^0, Z(3)^0 ],[ 0*Z(3), Z(3)^0, Z(3), Z(3)^0, 0*Z(3), Z(3)^0, 0*Z(3) ],])[128X[104X
    [4X[25Xgap>[125X [27XAmbientGeometry(l);[127X[104X
    [4X[28XH(3)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(EGQByBLTSet(BLTSetByqClan(LinearqClan(3)))));[127X[104X
    [4X[28X#I  Now embedding dual BLT-set into W(5,q)...[128X[104X
    [4X[28X#I  Computing elation group...[128X[104X
    [4X[28X<a point in <EGQ of order [ 9, 3 ] and basepoint in W(5, 3 ) >>[128X[104X
    [4X[25Xgap>[125X [27XPrint(p);[127X[104X
    [4X[28XNewRowVector(IsCVecRep,GF(3,1),[Z(3)^0,Z(3),Z(3),Z(3),Z(3)^0,0*Z(3),])[128X[104X
    [4X[25Xgap>[125X [27XAmbientGeometry(p);[127X[104X
    [4X[28X<EGQ of order [ 9, 3 ] and basepoint in W(5, 3 ) >[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  
  [1X3.3 [33X[0;0YFlags of incidence structures[133X[101X
  
  [33X[0;0YA  [13Xflag[113X of an incidence structure [22XS[122X is a set [22XF[122X of elements of [22XS[122X that are two
  by  two incident. This implies that all elements in [22XF[122X have a different type.
  A  flag  is  maximal  if  it  cannot  be extended with more elements. [5XFinInG[105X
  provides a basic category [10XIsFlagOfIncidenceStructure[110X. For different types of
  incidence  structures,  methods to create a flag can be installed. A [13Xchamber[113X
  is  a flag of size [22Xn[122X, where [22Xn[122X is the rank of the incidence structure. Recall
  that  an  incidence structure is an incidence geometry if every maximal flag
  is a chamber.[133X
  
  [1X3.3-1 FlagOfIncidenceStructure[101X
  
  [29X[2XFlagOfIncidenceStructure[102X( [3Xinc[103X, [3Xl[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ythe flag consisting of the elements of [3Xinc[103X in the list [3Xl[103X[133X
  
  [33X[0;0YIt  is  checked  if  all  elements  in [3Xl[103X are incident and belong to the same
  incidence structure. An empty list is allowed.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := PG(3,7);[127X[104X
    [4X[28XProjectiveSpace(3, 7)[128X[104X
    [4X[25Xgap>[125X [27Xpoint := VectorSpaceToElement(ps,[1,2,0,0]*Z(7)^0);[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xline := VectorSpaceToElement(ps,[[1,0,0,0],[0,1,0,0]]*Z(7)^0);[127X[104X
    [4X[28X<a line in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := VectorSpaceToElement(ps,[[1,0,0,0],[0,1,0,0],[0,0,0,1]]*Z(7)^0);[127X[104X
    [4X[28X<a plane in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(ps,[point,line,plane]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(3, 7)>[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.3-2 IsChamberOfIncidenceStructure[101X
  
  [29X[2XIsChamberOfIncidenceStructure[102X( [3Xflag[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ytrue if and only if [3Xflag[103X contains an element of each type[133X
  
  [33X[0;0YThe incidence structure is determined by the elements.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := PG(3,7);[127X[104X
    [4X[28XProjectiveSpace(3, 7)[128X[104X
    [4X[25Xgap>[125X [27Xpoint := VectorSpaceToElement(ps,[1,2,0,0]*Z(7)^0);[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xline := VectorSpaceToElement(ps,[[1,0,0,0],[0,1,0,0]]*Z(7)^0);[127X[104X
    [4X[28X<a line in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := VectorSpaceToElement(ps,[[1,0,0,0],[0,1,0,0],[0,0,0,1]]*Z(7)^0);[127X[104X
    [4X[28X<a plane in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xflag1 := FlagOfIncidenceStructure(ps,[point,plane]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27XIsChamberOfIncidenceStructure(flag1);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27Xflag2 := FlagOfIncidenceStructure(ps,[point,line,plane]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27XIsChamberOfIncidenceStructure(flag2);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.3-3 IsEmptyFlag[101X
  
  [29X[2XIsEmptyFlag[102X( [3Xflag[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ytrue or false[133X
  
  [33X[0;0YIt  is  possible to construct the empty flag of an incidence structure. This
  operation tests whether a given flag is empty.[133X
  
  [1X3.3-4 ElementsOfFlag[101X
  
  [29X[2XElementsOfFlag[102X( [3Xflag[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ya list of elements[133X
  
  [33X[0;0YThis operations simply returns the list of elements that define [3Xflag[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xgp := SplitCayleyHexagon(4);[127X[104X
    [4X[28XH(4)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(gp));[127X[104X
    [4X[28X#I  for Split Cayley Hexagon[128X[104X
    [4X[28X#I  Computing nice monomorphism...[128X[104X
    [4X[28X#I  Found permutation domain...[128X[104X
    [4X[28X<a point in H(4)>[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(p));[127X[104X
    [4X[28X<a line in H(4)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(gp,[l,p]);[127X[104X
    [4X[28X<a flag of H(4)>[128X[104X
    [4X[25Xgap>[125X [27XElementsOfFlag(flag);[127X[104X
    [4X[28X[ <a point in H(4)>, <a line in H(4)> ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.3-5 Rank[101X
  
  [29X[2XRank[102X( [3Xflag[103X ) [32X attribute
  [6XReturns:[106X  [33X[0;10Yan integer[133X
  
  [33X[0;0YThis operations returns the number of elements that define [3Xflag[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := ParabolicQuadric(8,3); [127X[104X
    [4X[28XQ(8, 3)[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(ps));[127X[104X
    [4X[28X<a line in Q(8, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := Random(Planes(l));[127X[104X
    [4X[28X<a plane in Q(8, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xsolid := Random(Solids(plane));[127X[104X
    [4X[28X<a solid in Q(8, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(ps,[l,plane,solid]);[127X[104X
    [4X[28X<a flag of Q(8, 3) >[128X[104X
    [4X[25Xgap>[125X [27XRank(flag);[127X[104X
    [4X[28X3[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.3-6 Size[101X
  
  [29X[2XSize[102X( [3Xflag[103X ) [32X attribute
  [6XReturns:[106X  [33X[0;10Yan integer[133X
  
  [33X[0;0YThis operations returns the number of elements that define [3Xflag[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := SymplecticSpace(5,7);[127X[104X
    [4X[28XW(5, 7)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(ps));[127X[104X
    [4X[28X<a point in W(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := Random(Planes(p));[127X[104X
    [4X[28X<a plane in W(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(ps,[p,p,plane]);[127X[104X
    [4X[28X<a flag of W(5, 7) >[128X[104X
    [4X[25Xgap>[125X [27XSize(flag);[127X[104X
    [4X[28X2[128X[104X
    [4X[25Xgap>[125X [27XElementsOfFlag(flag);[127X[104X
    [4X[28X[ <a point in W(5, 7)>, <a plane in W(5, 7)> ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.3-7 AmbientGeometry[101X
  
  [29X[2XAmbientGeometry[102X( [3Xflag[103X ) [32X attribute
  [6XReturns:[106X  [33X[0;10Yan incidence structure[133X
  
  [33X[0;0YThis operations returns the ambient geometry of the [3Xflag[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := SymplecticSpace(5,7);[127X[104X
    [4X[28XW(5, 7)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(ps));[127X[104X
    [4X[28X<a point in W(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := Random(Planes(p));[127X[104X
    [4X[28X<a plane in W(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(ps,[p,p,plane]);[127X[104X
    [4X[28X<a flag of W(5, 7) >[128X[104X
    [4X[25Xgap>[125X [27XSize(flag);[127X[104X
    [4X[28X2[128X[104X
    [4X[25Xgap>[125X [27XElementsOfFlag(flag);[127X[104X
    [4X[28X[ <a point in W(5, 7)>, <a plane in W(5, 7)> ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.3-8 Type[101X
  
  [29X[2XType[102X( [3Xflag[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan list of integers[133X
  
  [33X[0;0YThis operations returns the list of types of the elements defining [3Xflag[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(8,9);[127X[104X
    [4X[28XProjectiveSpace(8, 9)[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(pg));[127X[104X
    [4X[28X<a line in ProjectiveSpace(8, 9)>[128X[104X
    [4X[25Xgap>[125X [27Xs := Random(Solids(l));[127X[104X
    [4X[28X<a solid in ProjectiveSpace(8, 9)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(pg,[l,s]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(8, 9)>[128X[104X
    [4X[25Xgap>[125X [27XType(flag);[127X[104X
    [4X[28X[ 2, 4 ][128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(pg));[127X[104X
    [4X[28X<a point in ProjectiveSpace(8, 9)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(pg,[p]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(8, 9)>[128X[104X
    [4X[25Xgap>[125X [27XType(flag);[127X[104X
    [4X[28X[ 1 ][128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.3-9 IsIncident[101X
  
  [29X[2XIsIncident[102X( [3Xel[103X, [3Xflag[103X ) [32X operation
  [29X[2XIsIncident[102X( [3Xflag[103X, [3Xel[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ytrue or false[133X
  
  [33X[0;0YAn  element  is  incident with a flag if and only if it is incident with all
  elements defining the flag.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(3,5);[127X[104X
    [4X[28XProjectiveSpace(3, 5)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(pg));[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 5)>[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(p));[127X[104X
    [4X[28X<a line in ProjectiveSpace(3, 5)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := Random(Planes(l));[127X[104X
    [4X[28X<a plane in ProjectiveSpace(3, 5)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(pg,[l,plane]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(3, 5)>[128X[104X
    [4X[25Xgap>[125X [27XIsIncident(flag,l);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsIncident(l,flag);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X3.4 [33X[0;0YShadow of elements[133X[101X
  
  [1X3.4-1 ShadowOfElement[101X
  
  [29X[2XShadowOfElement[102X( [3Xinc[103X, [3Xv[103X, [3Xstr[103X ) [32X operation
  [29X[2XShadowOfElement[102X( [3Xinc[103X, [3Xv[103X, [3Xj[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10YThe collection of elements of type [3Xstr[103X or type [3Xj[103X incident with [3Xv[103X[133X
  
  [33X[0;0Y[3Xinc[103X  is  an  incidence structure, [3Xv[103X must be an element of [3Xinc[103X, [3Xstr[103X must be a
  string  which  is [12Xthe plural[112X of the name of one of the types of the elements
  of  [3Xinc[103X.  For  the  second  variant, [3Xj[103X is an integer representing one of the
  types   of   the   elements   of   [3Xinc[103X.   This   first   variant  relies  on
  [11XTypesOfElementsOfIncidenceStructurePlural[111X   and   on   a  particular  method
  installed  for  the  second variant for particular incidence structures. The
  use of the argument [3Xinc[103X makes it flexible, i.e., if the element [3Xv[103X can belong
  to  different  incidence  structures,  its  shadow  can be different, as the
  second example shows.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := ProjectiveSpace(3,3);[127X[104X
    [4X[28XProjectiveSpace(3, 3)[128X[104X
    [4X[25Xgap>[125X [27Xpi := Random(Planes(ps));[127X[104X
    [4X[28X<a plane in ProjectiveSpace(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xlines := ShadowOfElement(ps,pi,"lines");[127X[104X
    [4X[28X<shadow lines in ProjectiveSpace(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27XSize(lines);[127X[104X
    [4X[28X13[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(PG(3,3)));[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xlines1 := ShadowOfElement(SymplecticSpace(3,3),p,2);[127X[104X
    [4X[28X<shadow lines in W(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27XSize(lines1);[127X[104X
    [4X[28X4[128X[104X
    [4X[25Xgap>[125X [27Xlines2 := ShadowOfElement(PG(3,3),p,2); [127X[104X
    [4X[28X<shadow lines in ProjectiveSpace(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27XSize(lines2);[127X[104X
    [4X[28X13[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.4-2 ElementsIncidentWithElementOfIncidenceStructure[101X
  
  [29X[2XElementsIncidentWithElementOfIncidenceStructure[102X( [3Xv[103X, [3Xj[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10YThe collection of elements of type [3Xj[103X incident with [3Xv[103X[133X
  
  [33X[0;0YThis    operation    is    applicable    for    objects   [3Xv[103X   belonging   to
  [10XIsElementOfIncidenceStructure[110X,      and      is      a      shortcut      to
  [11XShadowOfElement(AmbientGeometry(v),v,j)[111X.[133X
  
  [1X3.4-3 ShadowOfFlag[101X
  
  [29X[2XShadowOfFlag[102X( [3Xinc[103X, [3Xflag[103X, [3Xstr[103X ) [32X operation
  [29X[2XShadowOfFlag[102X( [3Xinc[103X, [3Xlist[103X, [3Xstr[103X ) [32X operation
  [29X[2XShadowOfFlag[102X( [3Xinc[103X, [3Xflag[103X, [3Xj[103X ) [32X operation
  [29X[2XShadowOfFlag[102X( [3Xinc[103X, [3Xlist[103X, [3Xj[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10YThe collection of elements of type [3Xstr[103X or type [3Xj[103X incident with all
            elements of [3Xflag[103X, or with all elements of [3Xlist[103X[133X
  
  [33X[0;0YVariants    2   and   4   convert   [3Xlist[103X   to   a   flag   of   [3Xinc[103X,   using
  [11XFlagOfIcidenceStructure[111X, which performs the necessary checks. Variants 1 and
  2  rely  on  variants  3  and  4  respectively,  for  which a method must be
  installed for the particular incidence structure [3Xinc[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := PG(3,7);[127X[104X
    [4X[28XProjectiveSpace(3, 7)[128X[104X
    [4X[25Xgap>[125X [27Xpoint := VectorSpaceToElement(ps,[1,2,0,0]*Z(7)^0);[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := VectorSpaceToElement(ps,[[1,0,0,0],[0,1,0,0],[0,0,0,1]]*Z(7)^0);[127X[104X
    [4X[28X<a plane in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(ps,[point,plane]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xlines := ShadowOfFlag(ps,flag,"lines");[127X[104X
    [4X[28X<shadow lines in ProjectiveSpace(3, 7)>[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [1X3.4-4 ResidueOfFlag[101X
  
  [29X[2XResidueOfFlag[102X( [3Xflag[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan incidence structure[133X
  
  [33X[0;0YConsider  the  flag  [3Xflag[103X,  and  its  ambient  geometry [22XG[122X. All elements of [22XG[122X
  incident  with  all  elements  of  [3Xflag[103X,  together  with the incidence of [22XG[122X,
  determine  an  incidence  structure. This incidence structure is returned by
  this  operation.  Note that independently of the Category of [22XG[122X, the returned
  incidence structure is constructed using the operation [11XIncidenceStructure[111X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(4,5);[127X[104X
    [4X[28XProjectiveSpace(4, 5)[128X[104X
    [4X[25Xgap>[125X [27Xp := Random(Points(pg));[127X[104X
    [4X[28X<a point in ProjectiveSpace(4, 5)>[128X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(p));[127X[104X
    [4X[28X<a line in ProjectiveSpace(4, 5)>[128X[104X
    [4X[25Xgap>[125X [27Xflag := FlagOfIncidenceStructure(pg,[p,l]);[127X[104X
    [4X[28X<a flag of ProjectiveSpace(4, 5)>[128X[104X
    [4X[25Xgap>[125X [27Xres := ResidueOfFlag(flag);[127X[104X
    [4X[28XIncidence structure of rank 2[128X[104X
    [4X[25Xgap>[125X [27Xgamma := IncidenceGraph(res);;[127X[104X
    [4X[25Xgap>[125X [27XDiameter(gamma);[127X[104X
    [4X[28X3[128X[104X
    [4X[25Xgap>[125X [27XGirth(gamma);[127X[104X
    [4X[28X6[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X3.4-5 [33X[0;0YShort names for ElementsIncidentWithElementOfIncidenceStructure[133X[101X
  
  [29X[2XPoints[102X( [3Xinc[103X, [3Xv[103X ) [32X operation
  [29X[2XLines[102X( [3Xinc[103X, [3Xv[103X ) [32X operation
  [29X[2XPlanes[102X( [3Xinc[103X, [3Xv[103X ) [32X operation
  [29X[2XSolids[102X( [3Xinc[103X, [3Xv[103X ) [32X operation
  [29X[2XPoints[102X( [3Xv[103X ) [32X operation
  [29X[2XLines[102X( [3Xv[103X ) [32X operation
  [29X[2XPlanes[102X( [3Xv[103X ) [32X operation
  [29X[2XSolids[102X( [3Xv[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10YThe  collections of elements of [3Xinc[103X of respective type 1, 2, 3 and
            4, that are incident with [3Xv[103X[133X
  
  [33X[0;0YIf  [3Xinc[103X,  or  the ambient geometry of [3Xv[103X is an incidence structure, where the
  elements  of  type 1, 2, 3 and 4 are called "points", "lines", "planes", and
  "solids" respectively, these operations are shortcuts to [11XShadowOfElement[111X. If
  this is not the case, a method for these operations is not installed.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xline := Random(Lines(AG(5,4)));[127X[104X
    [4X[28X<a line in AG(5, 4)>[128X[104X
    [4X[25Xgap>[125X [27XPoints(line);[127X[104X
    [4X[28X<shadow points in AG(5, 4)>[128X[104X
    [4X[25Xgap>[125X [27XPlanes(line);[127X[104X
    [4X[28X<shadow planes in AG(5, 4)>[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  
  [1X3.5 [33X[0;0YEnumerating elements of an incidence structure[133X[101X
  
  [33X[0;0YIn several situations, it can be usful to compute a complete list of objects
  statisfying  one or more conditions. To list all elements of a given type of
  an  incidence structure, is a typical example. [5XFinInG[105X provides functionality
  that is common in GAP for this purpose.[133X
  
  [33X[0;0YIn  [5XFinInG[105X, typically a list of all elements satisfying a property, e.g. all
  points  of  a  projective  space,  are represented by a GAP object that is a
  [13Xcollection[113X.  The  word  'collection'  is important here. E.g. subspaces of a
  vector  space  are  not  calculated  on  calling [11XSubspaces[111X, rather primitive
  information is stored in an [11XIsComponentObjectRep[111X. So for example[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xv:=GF(31)^5;[127X[104X
    [4X[28X( GF(31)^5 )[128X[104X
    [4X[25Xgap>[125X [27Xsubs:=Subspaces(v,1);[127X[104X
    [4X[28XSubspaces( ( GF(31)^5 ), 1 )[128X[104X
  [4X[32X[104X
  
  [33X[0;0YFor  a  given collection [3XC[103X, one can use the GAP function [11XList[111X to compute all
  objects  in  the  collection  [3XC[103X. Such a list can be used to iterate over all
  objects  in  the list. However, if one needs only few random objects from [3XC[103X,
  or  if  one  needs  to  iterate  over  the  list  of objects until a certain
  condition  is  satisfied,  it can be highly inefficient to first compute all
  these objects. Therefore iterators and enumerators come into the picture.[133X
  
  [33X[0;0YAn  iterator is a GAP object that gives a user friendly way to loop over all
  elements  without  repetition.  Only  three  operations are applicable on an
  iterator:   [11XNextIterator[111X,   [11XIsDoneIterator[111X  and  [11XShallowCopy[111X.  Clearly,  all
  elements of a collection can be obtained by using an available iterator.[133X
  
  [1X3.5-1 Iterator[101X
  
  [29X[2XIterator[102X( [3XC[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan iterator for the collection [3XC[103X[133X
  
  [33X[0;0Y[3XC[103X  is  a  collection  of  elements of an incidence structure. An iterator is
  returned.  The second example demonstrates how an iterator is used by [11XFirst[111X.
  Clearly, not all points of the projective space are computed.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := PG(3,7);[127X[104X
    [4X[28XProjectiveSpace(3, 7)[128X[104X
    [4X[25Xgap>[125X [27Xplanes := Planes(ps);[127X[104X
    [4X[28X<planes of ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xiter := Iterator(planes);[127X[104X
    [4X[28X<iterator>[128X[104X
    [4X[25Xgap>[125X [27XNextIterator(iter);[127X[104X
    [4X[28X<a plane in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27XIsDoneIterator(iter);[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xpg := PG(12,81);[127X[104X
    [4X[28XProjectiveSpace(12, 81)[128X[104X
    [4X[25Xgap>[125X [27Xpts := Points(pg);[127X[104X
    [4X[28X<points of ProjectiveSpace(12, 81)>[128X[104X
    [4X[25Xgap>[125X [27XSize(pts);[127X[104X
    [4X[28X80763523615333416236653[128X[104X
    [4X[25Xgap>[125X [27Xps := ParabolicQuadric(12,81);[127X[104X
    [4X[28XQ(12, 81)[128X[104X
    [4X[25Xgap>[125X [27XFirst(pts,x->x in ps);[127X[104X
    [4X[28X<a point in ProjectiveSpace(12, 81)>[128X[104X
    [4X[25Xgap>[125X [27Xtime;[127X[104X
    [4X[28X23[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YIn  its  simplest  form,  an  enumerator  is  just a list containing all the
  elements  of the collection. Given any object in the list, it is possible to
  retrieve  its  number  in  the list (which is then just its position). Also,
  given any number between 1 and the length of the list, it is possible to get
  the  corresponding  element.  For some collections of elements of particular
  incidence structures, a more advanced version of enumerators is implemented.
  Such  an  advanced  version  is  an  object  containing  the  two  functions
  [11XElementNumber[111X   and  [11XNumberElement[111X.  Such  functions  are  able  to  compute
  directly, without listing all elements, the element with a given number, or,
  conversely,  compute  directly the number of a given element. Clearly, using
  an  enumerator, it is possible to obtain a list containing all elements of a
  collection.[133X
  
  [1X3.5-2 Enumerator[101X
  
  [29X[2XEnumerator[102X( [3XC[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan enumerator for the collection [3XC[103X[133X
  
  [33X[0;0Y[3XC[103X  is  a  collection of elements of an incidence structure. An enumerator is
  returned.  The  second  example  demonstrates  how  an enumerator is used by
  [11XRandom[111X.  Clearly,  not all points of the polar space are to obtain an random
  point.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xlines := Lines( ParabolicQuadric(6,3) );[127X[104X
    [4X[28X<lines of Q(6, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xenum := Enumerator( lines );[127X[104X
    [4X[28XEnumeratorOfSubspacesOfClassicalPolarSpace( <lines of Q(6, 3)> )[128X[104X
    [4X[25Xgap>[125X [27Xs := Size(enum);[127X[104X
    [4X[28X3640[128X[104X
    [4X[25Xgap>[125X [27Xn := Random([1..s]);[127X[104X
    [4X[28X3081[128X[104X
    [4X[25Xgap>[125X [27Xl := enum[n];[127X[104X
    [4X[28X<a line in Q(6, 3)>[128X[104X
    [4X[25Xgap>[125X [27XPosition(enum, l);[127X[104X
    [4X[28X3081[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xps := ParabolicQuadric(16,7^4);[127X[104X
    [4X[28XQ(16, 2401)[128X[104X
    [4X[25Xgap>[125X [27Xpts := Points(ps);[127X[104X
    [4X[28X<points of Q(16, 2401)>[128X[104X
    [4X[25Xgap>[125X [27XSize(pts);[127X[104X
    [4X[28X508233536514931541724405776067904925314839705888016[128X[104X
    [4X[25Xgap>[125X [27XRandom(pts);[127X[104X
    [4X[28X<a point in Q(16, 2401)>[128X[104X
    [4X[25Xgap>[125X [27Xtime;[127X[104X
    [4X[28X565[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YWhen  an  iterator  or enumerator is installed for a collection, [11XList[111X can be
  used to obtain all objects in that collection.[133X
  
  [1X3.5-3 List[101X
  
  [29X[2XList[102X( [3XC[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yall objects in the collection [3XC[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(2,2);[127X[104X
    [4X[28XProjectiveSpace(2, 2)[128X[104X
    [4X[25Xgap>[125X [27XList(Points(pg));[127X[104X
    [4X[28X[ <a point in ProjectiveSpace(2, 2)>, <a point in ProjectiveSpace(2, 2)>, [128X[104X
    [4X[28X  <a point in ProjectiveSpace(2, 2)>, <a point in ProjectiveSpace(2, 2)>, [128X[104X
    [4X[28X  <a point in ProjectiveSpace(2, 2)>, <a point in ProjectiveSpace(2, 2)>, [128X[104X
    [4X[28X  <a point in ProjectiveSpace(2, 2)> ][128X[104X
    [4X[25Xgap>[125X [27XList(Lines(pg));[127X[104X
    [4X[28X[ <a line in ProjectiveSpace(2, 2)>, <a line in ProjectiveSpace(2, 2)>, [128X[104X
    [4X[28X  <a line in ProjectiveSpace(2, 2)>, <a line in ProjectiveSpace(2, 2)>, [128X[104X
    [4X[28X  <a line in ProjectiveSpace(2, 2)>, <a line in ProjectiveSpace(2, 2)>, [128X[104X
    [4X[28X  <a line in ProjectiveSpace(2, 2)> ][128X[104X
    [4X[25Xgap>[125X [27Xps := ParabolicQuadric(6,2);[127X[104X
    [4X[28XQ(6, 2)[128X[104X
    [4X[25Xgap>[125X [27Xlines := List(Lines(ps));[127X[104X
    [4X[28X[ <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)> ][128X[104X
    [4X[25Xgap>[125X [27Xtime;[127X[104X
    [4X[28X3661[128X[104X
    [4X[25Xgap>[125X [27XSize(lines);[127X[104X
    [4X[28X315[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  [33X[0;0YFrom  the example in [14X3.5-3[114X it can be noted that although the number of lines
  is  only  315,  already  3  seconds  of  computing  time are needed. This is
  typically  observed  for  elements  of classicla polar spaces different from
  points  or  generators,  and  is  explained  by  the recursive nature of the
  implementation  of  the  enumerator. Computing a list of these objects as an
  orbit  under  the  collineation  group  is,  even  taking  into  account the
  computation  of  the nice monomorphism of the collineation group, often much
  faster.  Given a collection [3XC[103X, the function [11XAsList[111X performs this computation
  using the collineation group.[133X
  
  [1X3.5-4 AsList[101X
  
  [29X[2XAsList[102X( [3XC[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Yan ORB object containing all objects in [3XC[103X[133X
  
  [33X[0;0YThe  returned object is an ORB object. All objects can easily be obtained by
  applying the operation [11XList[111X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xps := ParabolicQuadric(6,2);[127X[104X
    [4X[28XQ(6, 2)[128X[104X
    [4X[25Xgap>[125X [27Xlines := AsList(Lines(ps));[127X[104X
    [4X[28X<closed orbit, 315 points>[128X[104X
    [4X[25Xgap>[125X [27Xtime;[127X[104X
    [4X[28X58[128X[104X
    [4X[25Xgap>[125X [27XList(lines);[127X[104X
    [4X[28X[ <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)>, [128X[104X
    [4X[28X  <a line in Q(6, 2)>, <a line in Q(6, 2)>, <a line in Q(6, 2)> ][128X[104X
    [4X[25Xgap>[125X [27Xtime;[127X[104X
    [4X[28X1[128X[104X
    [4X[28X[128X[104X
  [4X[32X[104X
  
  
  [1X3.6 [33X[0;0YLie geometries[133X[101X
  
  
  [1X3.6-1 [33X[0;0YMain categories in [10XIsLieGeometry[110X[101X[1X[133X[101X
  
  [29X[2XIsProjectiveSpace[102X[32X Category
  [29X[2XIsClassicalPolarSpace[102X[32X Category
  
  [33X[0;0YIn [5XFinInG[105X, a [13XLie geometry[113X [22XG[122X refers to a geometry whose automorphism group is
  a  (subgroup of a) group of Lie type. Generally spoken, one could say that a
  Lie  geometry  is an incidence geometry, such that each element of type [22Xi[122X is
  represented  by  a  sub  space  of  dimension  [22Xi+1[122X  of a vector space [22XV[122X. The
  projective  space  [22XP[122X  associated with [22XV[122X is naturally the [13Xambient space[113X of [22XG[122X.
  However,  as  one may also consider subspaces of the given vector space over
  [13Xsubfields  of the ground field of [22XV[122X[113X, one cannot not just say that the set of
  elements  of [22XG[122X of a given type [22Xi[122X, is a subset of the set of elements of type
  [22Xi[122X  of  [22XP[122X. Geometrically, this means that embeddings may be full or not, i.e.
  when  a line of a Lie geometry is embedded into [22XP[122X as a line [22Xl[122X, the embedding
  is full only if all projective points of [22Xl[122X have a pre image in [22XG[122X. Embeddings
  of finite classical polar spaces are full, and indeed the set of elements of
  type  [22Xi[122X  is  a  proper  subset  of  the  set  of  elements  of  type [22Xi[122X of [22XP[122X.
  Subgeometries of projective spaces behave differently, and indeed, a line of
  a subgeometry can be embedded into [22XP[122X, but will not be identified with a line
  of  [22XP[122X.  All  geometries  in  [5XFinInG[105X  that have a projective space as ambient
  space, belong to a subcategory of [10XIsLieGeometry[110X.[133X
  
  [33X[0;0YOne  common fact of Lie geometries is that their elements are represented by
  subspaces  of  a vector space. In these geometries, incidence is symmetrized
  set-theoretic  containment.  In  this  section  we describe methods that are
  declared in a generic way for (elements of) Lie geometries. These operations
  are applicable to Lie geometries and related objects.[133X
  
  [1X3.6-2 AmbientSpace[101X
  
  [29X[2XAmbientSpace[102X( [3Xig[103X ) [32X attribute
  [6XReturns:[106X  [33X[0;10Ythe ambient projective space of a Lie geometry [3Xig[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XAmbientSpace(PG(3,4));[127X[104X
    [4X[28XProjectiveSpace(3, 4)[128X[104X
    [4X[25Xgap>[125X [27XAmbientSpace(ParabolicQuadric(4,4));[127X[104X
    [4X[28XProjectiveSpace(4, 4)[128X[104X
    [4X[25Xgap>[125X [27XAmbientSpace(SplitCayleyHexagon(3));[127X[104X
    [4X[28XProjectiveSpace(6, 3)[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.6-3 UnderlyingVectorSpace[101X
  
  [29X[2XUnderlyingVectorSpace[102X( [3Xig[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ythe underlying vectorspace of the Lie geometry [3Xig[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XUnderlyingVectorSpace(PG(5,4));[127X[104X
    [4X[28X( GF(2^2)^6 )[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingVectorSpace(HermitianPolarSpace(4,4));[127X[104X
    [4X[28X( GF(2^2)^5 )[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.6-4 ProjectiveDimension[101X
  
  [29X[2XProjectiveDimension[102X( [3Xig[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ythe projective dimension of the ambient projective space of [3Xig[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XProjectiveDimension(PG(7,7));[127X[104X
    [4X[28X7[128X[104X
    [4X[25Xgap>[125X [27XProjectiveDimension(EllipticQuadric(5,2));[127X[104X
    [4X[28X5[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [33X[0;0YMathematically, it makes sense to implement an object representing the empty
  subspace,  since this is typically obtained as a result of a Meet operation,
  which  computes the intersection of two or more elements. On the other hand,
  we  do  not  consider  the  empty  subspace  as  an element of the incidence
  geometry.  Hence, using the empty subspace as an argument of [11XIsIncident[111X (and
  consequently of [11X\*[111X), will result in a ``no method found'' error.[133X
  
  [1X3.6-5 IsEmptySubspace[101X
  
  [29X[2XIsEmptySubspace[102X[32X Category
  
  [33X[0;0YCategory  for  objects  representing  the empty subspace of a particular Lie
  geometry. Empty subspaces of different geometries will be different objects,
  and have a different ambient geometry.[133X
  
  
  [1X3.7 [33X[0;0YElements of Lie geometries[133X[101X
  
  [33X[0;0YElements  of  a  Lie  geometry  are constructed using a list of vectors. The
  methods  installed  for  the  particular  Lie  geometries  check whether the
  subspace of the vector space represents an element of the Lie geometry.[133X
  
  [1X3.7-1 VectorSpaceToElement[101X
  
  [29X[2XVectorSpaceToElement[102X( [3Xig[103X, [3Xv[103X ) [32X operation
  [29X[2XVectorSpaceToElement[102X( [3Xig[103X, [3Xl[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ythe  element of [3Xig[103X, represented by the subspace spanned by [3Xv[103X or [3Xl[103X,
            or returns the empty subspace.[133X
  
  [33X[0;0YThe first variant of this operation takes as second argument a vector of the
  underlying  vector space of [3Xig[103X. Such a vector possibly represents a point of
  [3Xig[103X.  The  second  variant  takes as second argument a list of vectors in the
  underlying  vector  space  of  [3Xig[103X.  Such a list represents a subspace of the
  vector space. If the dimension of the subspace generated by [3Xl[103X is larger than
  zero and strictly less than the dimension of the vector space, it is checked
  if  the subspace represents an element of [3Xig[103X, except when [3Xig[103X is a projective
  space.  If [3Xl[103X is a list of vectors generating the whole vector space, then [3Xig[103X
  is  returned  if and only if [3Xig[103X is a projective space, otherwise an error is
  produced. An empty list is not allowed as second argument.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xv := [1,1,1,0,0,0]*Z(7)^0;[127X[104X
    [4X[28X[ Z(7)^0, Z(7)^0, Z(7)^0, 0*Z(7), 0*Z(7), 0*Z(7) ][128X[104X
    [4X[25Xgap>[125X [27Xw := [0,0,0,1,1,1]*Z(7)^0;[127X[104X
    [4X[28X[ 0*Z(7), 0*Z(7), 0*Z(7), Z(7)^0, Z(7)^0, Z(7)^0 ][128X[104X
    [4X[25Xgap>[125X [27XVectorSpaceToElement(PG(5,7),v);[127X[104X
    [4X[28X<a point in ProjectiveSpace(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27XVectorSpaceToElement(PG(5,7),[v,w]);[127X[104X
    [4X[28X<a line in ProjectiveSpace(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27XVectorSpaceToElement(SymplecticSpace(5,7),v);[127X[104X
    [4X[28X<a point in W(5, 7)>[128X[104X
    [4X[25Xgap>[125X [27XVectorSpaceToElement(SymplecticSpace(5,7),[v,w]);[127X[104X
    [4X[28XError, <x> does not generate an element of <geom> called from[128X[104X
    [4X[28X<function "unknown">( <arguments> )[128X[104X
    [4X[28X called from read-eval loop at line 13 of *stdin*[128X[104X
    [4X[28Xyou can 'quit;' to quit to outer loop, or[128X[104X
    [4X[28Xyou can 'return;' to continue[128X[104X
    [4X[26Xbrk>[126X [27Xquit;[127X[104X
    [4X[25Xgap>[125X [27XVectorSpaceToElement(HyperbolicQuadric(5,7),v);[127X[104X
    [4X[28XError, <v> does not generate an element of <geom> called from[128X[104X
    [4X[28X<function "unknown">( <arguments> )[128X[104X
    [4X[28X called from read-eval loop at line 13 of *stdin*[128X[104X
    [4X[28Xyou can 'quit;' to quit to outer loop, or[128X[104X
    [4X[28Xyou can 'return;' to continue[128X[104X
    [4X[26Xbrk>[126X [27Xquit;[127X[104X
    [4X[25Xgap>[125X [27XVectorSpaceToElement(HyperbolicQuadric(5,7),0*v);[127X[104X
    [4X[28X< empty subspace >[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.7-2 UnderlyingObject[101X
  
  [29X[2XUnderlyingObject[102X( [3Xv[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ya  CVEC  object,  which  is  the vector or matrix representing the
            element [3Xv[103X[133X
  
  [33X[0;0YThe  argument [3Xv[103X must be an element, so it is not allowed that [3Xv[103X is the empty
  subspace,  or  just  a  projective  space.  Note  that [11XUnpack[111X can be used to
  convert the CVEC object into a usual GAP vector or matrix.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xl := Random(Lines(PG(4,3)));[127X[104X
    [4X[28X<a line in ProjectiveSpace(4, 3)>[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingObject(l);[127X[104X
    [4X[28X<cmat 2x5 over GF(3,1)>[128X[104X
    [4X[25Xgap>[125X [27XUnpack(last);[127X[104X
    [4X[28X[ [ Z(3)^0, Z(3), 0*Z(3), 0*Z(3), Z(3) ], [128X[104X
    [4X[28X  [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3)^0, 0*Z(3) ] ][128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  [1X3.7-3 \in[101X
  
  [29X[2X\in[102X( [3Xu[103X, [3Xv[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ytrue  if  and only if the element [3Xu[103X is set-theoretically contained
            in the element [3Xw[103X[133X
  
  [33X[0;0YBoth arguments must be elements of the same Lie geometry. The empty subspace
  and  a  Lie  geometry  are  also  allowed as arguments. This relation is not
  symmetric,  and the methods for [11XIsIncident[111X use this method to test incidence
  between elements.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xp := VectorSpaceToElement(PG(3,3),[1,0,0,0]*Z(3)^0);[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xl := VectorSpaceToElement(PG(3,3),[[1,0,0,0],[0,1,0,0]]*Z(3)^0);[127X[104X
    [4X[28X<a line in ProjectiveSpace(3, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xp in l;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xp in p;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xl in p;[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27Xl in PG(3,3);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  
  [1X3.7-4 [33X[0;0YMore short names for [11XElementsIncidentWithElementOfIncidenceStructure[111X[101X[1X[133X[101X
  
  [29X[2XHyperplanes[102X( [3Xinc[103X, [3Xv[103X ) [32X operation
  [29X[2XHyperplanes[102X( [3Xv[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Ythe  elements  of type [22Xj-1[122X incident with [3Xv[103X, which is an element of
            type [22Xj[122X[133X
  
  [33X[0;0YThis  operation  is  a  shortcut to the operation [11XShadowOfElement[111X, where the
  geometry  is  taken from [3Xv[103X, and where the elements of type one less than the
  type  of  [3Xv[103X  are asked. [3Xv[103X is allowed to be a complete projective space here,
  yielding the hyperplanes of that space.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xpg := PG(3,7);[127X[104X
    [4X[28XProjectiveSpace(3, 7)[128X[104X
    [4X[25Xgap>[125X [27Xhyp := Random(Hyperplanes(pg));[127X[104X
    [4X[28X<a plane in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xh1 := Random(Hyperplanes(hyp));[127X[104X
    [4X[28X<a line in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xh2 := Random(Hyperplanes(h1));[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xps := SymplecticSpace(7,3);[127X[104X
    [4X[28XW(7, 3)[128X[104X
    [4X[25Xgap>[125X [27Xsolid := Random(Solids(ps));[127X[104X
    [4X[28X<a solid in W(7, 3)>[128X[104X
    [4X[25Xgap>[125X [27Xplane := Random(Hyperplanes(solid));[127X[104X
    [4X[28X<a plane in W(7, 3)>[128X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
  
  [1X3.8 [33X[0;0YChanging the ambient geometry of elements of a Lie geometry[133X[101X
  
  [33X[0;0YA  Lie geometry, i.e., an object in the category [10XIsLieGeometry[110X, is naturally
  embedded  in  a projective space. This is of course in a mathematical sense.
  In [5XFinInG[105X, certain embeddings are implemented by providing a mapping between
  geometries.  The  Lie geometries are in some sense [13Xhard wired[113X embedded, just
  simply because a category containing elements of a Lie geometry, is always a
  subcategory  of  [10XIsSubspaceOfProjectiveSpace[110X.  As  a consequence, operations
  applicable  to  objects  in  the category [10XIsSubspaceOfProjectiveSpace[110X are by
  default  applicable to objects in any subcategory, so to elements of any Lie
  geometry.  When  dealing with elements of e.g. different polar spaces in the
  same  projective  space, this yields a natural way of working with them, and
  investigating  relations between them, without bothering about all necessary
  mappings.  On the other hand, in some situations, it is impossible to decide
  in  which  geometry  an element has to be considered. An easy example is the
  following. Consider two different quadrics in the same projective space. The
  intersection  of two elements, one of each quadric, is clearly an element of
  the ambient projective space. But also of both quadrics. Without extra input
  of  the  user,  the  system cannot decide in which geometry to construct the
  intersection.  To  avoid  complicated  methods  with many arguments, in such
  situations,  the resulting element will be constructed in the common ambient
  projective  space.  Only  in clear situations, where the ambient geometry of
  all  elements  is  the  same,  and  equal  to  the geometry of the resulting
  element,  the resulting element will be constructed in this common geometry.
  We provide however conversion operations for elements of Lie gometries.[133X
  
  [1X3.8-1 ElementToElement[101X
  
  [29X[2XElementToElement[102X( [3Xps[103X, [3Xel[103X ) [32X operation
  [29X[2XEmbed[102X( [3Xps[103X, [3Xel[103X ) [32X operation
  [6XReturns:[106X  [33X[0;10Y[3Xel[103X as an element of [3Xps[103X[133X
  
  [33X[0;0YLet     [3Xps[103X     be     any     Lie     geometry.    This    method    returns
  [11XVectorSpaceToElement(ps,ElementToVectorSpace(el))[111X,   if  the  conversion  is
  possible. [11XEmbed[111X is declared as a synonym of [11XElementToElement[111X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xp := VectorSpaceToElement(PG(3,7),[0,1,0,0]*Z(7)^0);[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xq := ElementToElement(HyperbolicQuadric(3,7),p);[127X[104X
    [4X[28X<a point in Q+(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27Xr := VectorSpaceToElement(PG(3,7),[1,1,0,0]*Z(7)^0);[127X[104X
    [4X[28X<a point in ProjectiveSpace(3, 7)>[128X[104X
    [4X[25Xgap>[125X [27XElementToElement(HyperbolicQuadric(3,7),r);[127X[104X
    [4X[28XError, <v> does not generate an element of <geom> called from[128X[104X
    [4X[28XVectorSpaceToElement( geom, Unpack( v ) ) called from[128X[104X
    [4X[28XVectorSpaceToElement( ps, UnderlyingObject( el ) ) called from[128X[104X
    [4X[28X<function "unknown">( <arguments> )[128X[104X
    [4X[28X called from read-eval loop at line 11 of *stdin*[128X[104X
    [4X[28Xyou can 'quit;' to quit to outer loop, or[128X[104X
    [4X[28Xyou can 'return;' to continue[128X[104X
    [4X[26Xbrk>[126X [27Xquit;[127X[104X
    [4X[28X [128X[104X
  [4X[32X[104X
  
