Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  liegeometry.gi   Sprache: unbekannt

 
#############################################################################
##
##  liegeometry.gi            FinInG package
##                                                              John Bamberg
##                                                              Anton Betten
##                                                              Jan De Beule
##                                                             Philippe Cara
##                                                            Michel Lavrauw
##                                                           Max Neunhoeffer
##
##  Copyright 2018 Colorado State University
##                  Sabancı Üniversitesi
##     Università degli Studi di Padova
##     Universiteit Gent
##     University of St. Andrews
##     University of Western Australia
##                  Vrije Universiteit Brussel
##
##
##  Implementation stuff for Lie geometries.
##
#############################################################################


#############################################################################
# General methods.
#############################################################################

# CHECKED 02/08/2014 (made general for Lie geometries) jdb
#############################################################################
#O  UnderlyingVectorSpace( <ps> )
# returns the Underlying vectorspace of the projective space <ps>
##
InstallMethod( UnderlyingVectorSpace, 
 "for a lie geometry",
 [ IsLieGeometry],
 function(ps)
  return ShallowCopy(ps!.vectorspace);
 end);

# CHECKED 02/08/2014 (made general for Lie geometries) jdb
#############################################################################
#A  ProjectiveDimension( <ps> )
# returns the projective dimension of <ps>
##
InstallMethod( ProjectiveDimension,
 "for a lie space",
 [ IsLieGeometry ],
 geom -> geom!.dimension
 );
 
# CHECKED 02/08/2014 (made general for Lie geometries) jdb
#############################################################################
#A  Dimension( <ps> )
# returns the projective dimension of <ps>
##
InstallMethod( Dimension, 
 "for a lie space",
 [ IsLieGeometry ],
 geom -> geom!.dimension
 );

# CHECKED 02/08/2014 (made general for Lie geometries) jdb
#############################################################################
#O  BaseField( <ps> )
# returns the basefield of <ps>
##
InstallMethod( BaseField, 
 "for a projective space", 
 [ IsLieGeometry ],
 geom -> geom!.basefield );

# CHECKED 02/08/2014 jdb
#############################################################################
#O  Wrap( <geo>, <type>, <o> )
# general method that just wraps the data (<o>) as an element of a Lie geometry.
# does not do any checking. <geo> and <type> are obviously also arguments. 
# Not for users, not documented. Note that currently, we have no geometries
# that are in IsLieGeometry but not in a subcategory. So this method is never
# used. 
##
InstallMethod( Wrap, 
 "for a Lie geometry and an object",
 [IsLieGeometry, IsPosInt, IsObject],
 function( geo, type, o )
  local w;
  w := rec( geo := geo, type := type, obj := o );
  Objectify( NewType( ElementsOfIncidenceStructureFamily, IsElementOfIncidenceStructure and
  IsElementOfIncidenceStructureRep and IsElementOfLieGeometry ), w );
  return w;
 end );

# CHECKED 17/04/11 jdb
#############################################################################
#O  UnderlyingObject( <x> )
# User version of Unwrap, for elements of Lie geometries.
##
InstallMethod( UnderlyingObject, 
 "for an element of a LieGeometry",
 [IsElementOfLieGeometry],
 function( x )
  return Unwrap(x);
 end );

# ADDED 28/11/11 jdb + pc
#############################################################################
#O  AmbientSpace( <subspace> ) returns the ambient space of <subspace>, an
# element of a Lie geometry.
##
InstallMethod( AmbientSpace, 
 "for an element of a Lie geometry",
 [IsElementOfLieGeometry],
 function(subspace)
  return AmbientSpace(subspace!.geo);
 end );

#############################################################################
# Viewing/Printing/Displaying methods.
#############################################################################

InstallMethod( ViewObj, "for IsAllElementsOfLieGeometry",
 [ IsAllElementsOfLieGeometry and IsAllElementsOfLieGeometryRep ],
 function( vs )
  Print("<All elements of ");
  ViewObj(vs!.geometry);
  Print(">");
 end );

InstallMethod( PrintObj, "for IsAllElementsOfLieGeometry",
 [ IsAllElementsOfLieGeometry and IsAllElementsOfLieGeometryRep ],
 function( vs )
  Print("AllElementsOfIncidenceStructure( ",vs!.geometry," )");
 end );

InstallMethod( ViewObj, "for IsAllElementsOfLieGeometry",
 [ IsElementsOfLieGeometry and IsElementsOfLieGeometryRep ],
 function( vs )
  Print("<",TypesOfElementsOfIncidenceStructurePlural(vs!.geometry)[vs!.type]," of ");
  ViewObj(vs!.geometry);
  Print(">");
 end );

InstallMethod( PrintObj, "for IsElementsOfLieGeometry",
 [ IsElementsOfLieGeometry and IsElementsOfLieGeometryRep ],
 function( vs )
  Print("ElementsOfIncidenceStructure( ",vs!.geometry," , ",vs!.type,")");
 end );

#############################################################################
# User friendly named operations for points, lines, planes, solids
# for Lie geometries. These operations are not checking if the Lie geometry
# really contains the elements of the asked type. If not, an error will be
# produced by ElementsOfIncidenceStructure. The latter method needs to be
# created for each type of Lie geometry separately.
#############################################################################

# CHECKED 18/4/2011 jdb
#############################################################################
#O  Points( <ps> )
# returns ElementsOfIncidenceStructure(ps,1), <ps> a Lie Geometry.
## 
InstallMethod( Points, "for a Lie geometry",
 [IsLieGeometry],
 function( ps )
  return ElementsOfIncidenceStructure(ps, 1);
 end);

# CHECKED 18/4/2011 jdb
#############################################################################
#O  Lines( <ps> )
# returns ElementsOfIncidenceStructure(ps,2), <ps> a Lie Geometry.
## 
InstallMethod( Lines, "for a Lie geometry",
 [IsLieGeometry],
 function( ps )
  return ElementsOfIncidenceStructure(ps, 2);
 end);

# CHECKED 18/4/2011 jdb
#############################################################################
#O  Planes( <ps> )
# returns ElementsOfIncidenceStructure(ps,3), <ps> a Lie Geometry.
## 
InstallMethod( Planes, "for a Lie geometry",
 [IsLieGeometry],
 function( ps )
  return ElementsOfIncidenceStructure(ps, 3);
 end);

# CHECKED 18/4/2011 jdb
#############################################################################
#O  Solids( <ps> )
# returns ElementsOfIncidenceStructure(ps,4), <ps> a Lie Geometry.
## 
InstallMethod( Solids, "for a Lie geometry",
 [IsLieGeometry],
 function( ps )
  return ElementsOfIncidenceStructure(ps, 4);
 end);

#############################################################################
# Generic method for the emptysubspace of Lie geometries.
#############################################################################

# CHECKED 02/08/2014 jdb
#############################################################################
#O  EmptySubspace( <g> )
# returns the empty subspace in the Lie geometry <g>
## 
InstallMethod( EmptySubspace, 
 "for a Lie geometry",
 [IsLieGeometry],
 function( g )
  local  vs,x,w,ty;
  vs:=UnderlyingVectorSpace(g);
  #x := ShallowCopy(Zero(vs));
  #x := Unpack(ShallowCopy(Zero(vs))); #Unpack is the answer to all our CVec/CMat questions. 
#This is actually a bit eaxagerated. Sometimes Zero(vs) will return a "dirty" GAP vector, then Unpack works. But sometims
#it will be a list, then Unpack does not work anymore. I don't want a case distinction here. ZeroVector (from cvec) 
#asks a cvec as argument, which is a bit inconvenient. So I do it the dirty way.
  x := NewMatrix(IsCMatRep,g!.basefield,g!.dimension+1,[Zero(ShallowCopy(vs))]);
  #w := rec( geo := g, obj := x ); #changed 19/3/2014
  w := rec( geo := g, obj := x[1] );
  ty:= NewType( NewFamily("EmptySubspaceFamily"), IsEmptySubspace and IsEmptySubspaceRep );
  #ObjectifyWithAttributes( w, ty, AmbientSpace, g, ProjectiveDimension, -1);
  ObjectifyWithAttributes( w, ty, AmbientSpace, AmbientSpace(g), ProjectiveDimension, -1);
  return w;
 end );

# Added 31/10/2012 jdb
#############################################################################
#O  BaseField( <sub> )
# returns the basefield of the empty subspace.
##
InstallMethod( BaseField, 
 "for the empty subspace of a Lie geometry", 
 [IsEmptySubspace and IsEmptySubspaceRep],
 sub -> AmbientSpace(sub)!.basefield );


# 3 CHECKED 7/09/2011 jdb
#############################################################################
# View, PRint and Display for IsEmptySubspace
#############################################################################

InstallMethod( ViewObj, [IsEmptySubspace],
  function(x)
    Print("< empty subspace >");
  end );
  
InstallMethod( PrintObj, [IsEmptySubspace],
  function(x)
    PrintObj(Zero(UnderlyingVectorSpace(AmbientSpace(x))));
  end );

InstallMethod( Display, [IsEmptySubspace],
  function(x)
    Print("< empty subspace >");
  end );

# CHECKED 7/09/2011 jdb
#############################################################################
#O  \=( <e1>, <e2> )
# returns true if <e1> and <e2> are empty spaces in the same ambient spaces.
# Remark: this method is correct, but at this very moment, I might get unhappy
# with the meaning of AmbientSpace (and its sibling AmbientGeometry). Making me
# happy again with these concepts, might change the code below later on.
## 
InstallMethod( \=, "for two empty subspaces",
        [IsEmptySubspace, IsEmptySubspace],
        function(e1,e2);
        return AmbientSpace(e1) = AmbientSpace(e2);
  end );

# CHECKED 7/09/2011 jdb
#jdb 30/10/15: This method is not used anymore after commenting out the Unwrapper stuff in geometry.gd
#see the comment there.
#############################################################################
#O  \^( <e>, <u> )
# unwrapping the empty subspace
## 
#InstallMethod( \^, "unwrapping an empty subspace",
#  [ IsEmptySubspace, IsUnwrapper ],
#  function( e, u )
#    return [];
#  end );

#############################################################################
# Methods for \in with the EmtySubspace and elements of a Lie geometry.
# Since the empty subspace is not 
# an element of an incidence geometry, we don't provide methods for IsIncident.
# This was decided on 17/04/2011 (Vicenza).
# Now I add the extra checks to see if two empty subspaces belong to the same
# space.
#############################################################################

# CHECKED 7/09/2011 jdb
#############################################################################
#O  \in( <x>, <y> )
# for two empty subspaces. Returns true if the vectorspace of their ambient
# spaces is the same.
## 
InstallOtherMethod( \in, 
 "for a empty subspace and a empty subspace", 
 [ IsEmptySubspace, IsEmptySubspace ],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return true;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );
  
# CHECKED 7/09/2011 jdb
#############################################################################
#O  \in( <x>, <y> )
# for the empty subspace and a non empty one. Returns true if the 
# vectorspace of their ambient spaces is the same.
## 
InstallOtherMethod( \in, 
 "for the empty subspace and an element of a Lie geometry", 
 [ IsEmptySubspace, IsElementOfLieGeometry ],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return true;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );
 
# CHECKED 7/09/2011 jdb
#############################################################################
#O  \in( <x>, <y> )
# for a non empty subspace and the empty one. Returns true if the 
# vectorspace of their ambient spaces is the same.
## 
InstallOtherMethod( \in, 
 "for an element of a Lie geometry and the empty subspace", 
 [ IsElementOfLieGeometry, IsEmptySubspace ],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return false;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );

# CHECKED 7/09/2011 jdb
#############################################################################
#O  \in( <x>, <y> )
# for the empty subspace and a Lie geometry. Returns true if the vectorspace 
# of <x> is the same as the vectorspace of the geomery.
# Remark that we do not implement a generic method to check if a particular 
# Lie geometry is contained in the empty subspace. If this is desired, e.g. for
# projective spces, it should be implemented for this particular space.
## 
InstallOtherMethod( \in, 
 "for the empty subspace and a Lie geometry", 
 [ IsEmptySubspace, IsLieGeometry ],
 function( x, y )
  if x!.geo!.vectorspace = y!.vectorspace then
   return true;
  else
   Error( "The subspace <x> has a different ambient space than <y>" );
  fi;
 end );

#############################################################################
# Span and Meet methods for the trival space and elements of Lie geometires.
# Same checks as in the \in methods.
#############################################################################

# CHECKED 7/09/2011 jdb
#############################################################################
#O  Span( <x>, <y> )
# for the empty subspace and an element of a Lie geometry. Returns <y> if
# both arguments' ambient space has the same vectorspace
##
InstallMethod( Span, 
 "for the empty subspace and an element of a Lie geometry", 
 [ IsEmptySubspace, IsElementOfLieGeometry ],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return y;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );

# CHECKED 7/09/2011 jdb
#############################################################################
#O  Span( <x>, <y> )
# for an element of a Lie geometry and the empty subspace. Returns <y> if
# both arguments' ambient space has the same vectorspace
##
InstallMethod( Span, 
 "for an element of a Lie geometry and the empty subspace", 
 [ IsElementOfLieGeometry, IsEmptySubspace ],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return x;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );

# CHECKED 7/09/2011 jdb
#############################################################################
#O  Span( <x>, <y> )
# for the empty subspace and the empty subspace. Returns <x> if
# both arguments' ambient space has the same vectorspace
##
InstallMethod( Span, 
 "for the empty subspace and the empty subspace",
 [IsEmptySubspace, IsEmptySubspace],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return x;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );

# CHECKED 7/09/2011 jdb
#############################################################################
#O  Meet( <x>, <y> )
# for the empty subspace and the empty subspace. Returns <x> if
# both arguments' ambient space has the same vectorspace.
##
InstallMethod( Meet, 
 "for the empty subspace and a projective subspace", 
 [ IsEmptySubspace, IsElementOfLieGeometry ],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return x;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );

# CHECKED 7/09/2011 jdb
#############################################################################
#O  Meet( <x>, <y> )
# for an element of a Lie geometry and the empty subspace. Returns <y> if
# both arguments' ambient space has the same vectorspace
##
InstallMethod( Meet, 
 "for the empty subspace and a projective subspace", 
 [ IsElementOfLieGeometry, IsEmptySubspace ],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return y;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );

# CHECKED 7/09/2011 jdb
#############################################################################
#O  Meet( <x>, <y> )
# for the empty subspace and the empty subspace. Returns <x> if
# both arguments' ambient space has the same vectorspace
##
InstallMethod( Meet, 
 "for the empty subspace and the empty subspace",
 [IsEmptySubspace, IsEmptySubspace],
 function( x, y )
  if x!.geo!.vectorspace = y!.geo!.vectorspace then
   return x;
  else
   Error( "The subspaces <x> and <y> belong to different ambient spaces" );
  fi;
 end );

#############################################################################
#
# Nice shortcuts to ShadowOfElement. Remind that shadow functionality 
# is to be implemented for the particular Lie geometries. See corresponding
# files. Very important: although we see functions here for Lie geometries
# where one could expect "containment" to be more in use than "incidence"
# the methods for Points, etc. really refer to "is incident with" than to
# is contained in. So these are really shortcuts to ElementsIncidentWithElementOfIncidenceStructure.
# From that point of view, we do not implement shadow functionaly for the empty subspace.
#
# These operations are user friendly and documented. But be carefull, the version
# with two arguments, <geo> and <el> can be used to "convert" elements created
# a Lie geometry, say a quadric, into the Lie geometry <geo>, e.g. the ambient
# projective space. Since these are generic methods for Lie geometries and 
# their elements, the responsability of checking that such is conversion is possible
# must be done in the methods for the operation ShadowOfElement. This is a decision
# of the developpers (or at least the dictator among them). 7/9/11 jdb.
#
#############################################################################


# CHECKED 19/4/2011 jdb
#############################################################################
#O  Points( <el> )
# returns the points, i.e. elements of type <1> in <el>, relying on ShadowOfElement 
# for particular <el>.
## 
InstallMethod( Points, "for IsElementOfLieGeometry",
 [ IsElementOfLieGeometry ],
 function( var )
  return ShadowOfElement(var!.geo, var, 1);
 end );

# CHECKED 19/4/2011 jdb
#############################################################################
#O  Points( <geo>, <el> )
# returns the points, i.e. elements of type <1> in <el>, all in <geo> 
# relying on ShadowOfElement for particular <geo> and <el>.
##
InstallMethod( Points, "for IsLieGeometry and IsElementOfLieGeometry", 
 [ IsLieGeometry, IsElementOfLieGeometry ],
 function( geo, var )
  return ShadowOfElement(geo, var, 1);
 end );

# CHECKED 19/4/2011 jdb
#############################################################################
#O  Lines( <el> )
# returns the lines, i.e. elements of type <2> in <el>, relying on ShadowOfElement 
# for particular <el>.
## 
InstallMethod( Lines, "for IsElementOfLieGeometry", 
 [ IsElementOfLieGeometry ],
 function( var )
  return ShadowOfElement(var!.geo, var, 2);
 end );

# CHECKED 19/4/2011 jdb
#############################################################################
#O  Lines( <geo>, <el> )
# returns the points, i.e. elements of type <2> in <el>, all in <geo> 
# relying on ShadowOfElement for particular <geo> and <el>.
##
InstallMethod( Lines, "for IsLieGeometry and IsElementOfLieGeometry", 
 [ IsLieGeometry, IsElementOfLieGeometry ],
 function( geo, var )
  return ShadowOfElement(geo, var, 2);
 end );

# CHECKED 19/4/2011 jdb
#############################################################################
#O  Planes( <el> )
# returns the lines, i.e. elements of type <3> in <el>, relying on ShadowOfElement 
# for particular <el>.
## 
InstallMethod( Planes, "for IsElementOfLieGeometry", 
 [ IsElementOfLieGeometry ],
 function( var )
  return ShadowOfElement(var!.geo, var, 3);
 end );

# CHECKED 19/4/2011 jdb
#############################################################################
#O  Planes( <geo>, <el> )
# returns the points, i.e. elements of type <2> in <el>, all in <geo> 
# relying on ShadowOfElement for particular <geo> and <el>.
##
InstallMethod( Planes, "for IsLieGeometry and IsElementOfLieGeometry", 
 [ IsLieGeometry, IsElementOfLieGeometry ],
 function( geo, var )
  return ShadowOfElement(geo, var, 3);
 end );

# CHECKED 19/4/2011 jdb
#############################################################################
#O  Solids( <el> )
# returns the lines, i.e. elements of type <3> in <el>, relying on ShadowOfElement 
# for particular <el>.
##
InstallMethod( Solids, [ IsElementOfLieGeometry ],
  function( var )
    return ShadowOfElement(var!.geo, var, 4);
  end );

# CHECKED 19/4/2011 jdb
#############################################################################
#O  Solids( <geo>, <el> )
# returns the points, i.e. elements of type <2> in <el>, all in <geo> 
# relying on ShadowOfElement for particular <geo> and <el>.
##
InstallMethod( Solids, "for IsElementOfLieGeometry", 
 [ IsLieGeometry, IsElementOfLieGeometry ],
 function( geo, var )
  return ShadowOfElement(geo, var, 4);
 end );

# ADDED 22/12/2011 jdb
#############################################################################
#O  Hyperplanes( <el> )
# returns the hyperplanes contained in <el>, relying on ShadowOfElement 
# for particular <el>.
##
InstallMethod( Hyperplanes, 
 "for elements of a Lie geometry",
 [ IsElementOfLieGeometry ],
 function( var )
  if var!.type = 1 then
   Error("There are no elements of type 0");
  fi;
  return ShadowOfElement( var!.geo, var, var!.type - 1 );
  end );

# ADDED 22/12/2011 jdb
#############################################################################
#O  Hyperplanes( <geo>, <el> )
# returns the hyperplanes incident with <el>, relying on ShadowOfElement 
# for particular <el>.
##
InstallMethod( Hyperplanes, 
 "for a Lie geometry and elements of a Lie geometry",
 [ IsLieGeometry, IsElementOfLieGeometry ],
 function( geo, var )
  return ShadowOfElement( geo, var, geo!.dimension );
end );

#############################################################################
# Finally a generic ViewObj method for shadow elements.
#############################################################################
#CHECKED 7/9/2011 jdb
##
InstallMethod( ViewObj,
 "for shadow elements of a Lie geometry", 
 [ IsShadowElementsOfLieGeometry and IsShadowElementsOfLieGeometryRep ],
 function( vs )
  Print("<shadow ",TypesOfElementsOfIncidenceStructurePlural(vs!.geometry)[vs!.type]," in ");
  ViewObj(vs!.geometry);
  Print(">");
 end );


#############################################################################
# A method to check set theoretic containment for elements of a Lie geometry.
#############################################################################


# CREATED 13/9/2011 jdb
#############################################################################
#O  \in( <x>, <y> )
# returns true if <x> is contained in <y>, from the set theoretic point of view.
##
InstallMethod( \in,
 "for two elements of a Lie geometry",
 [IsElementOfLieGeometry,   IsElementOfLieGeometry],
## some of this function is based on the
## SemiEchelonMat function. we save time by assuming that the matrix of
## each subspace is already in semiechelon form.
## method only applies to projective and polar spaces
  function( x, y )
    local ambx, amby, typx, typy, mat,
          zero,      # zero of the field of <mat>
          nrows,
          ncols,     # number of columns in <mat>
          vectors,   # list of basis vectors
          nvectors,
          i,         # loop over rows
          j,         # loop over columns
          z,         # a current element
          nzheads,   # list of non-zero heads
          row;       # the row of current interest


    ambx := x!.geo;
    amby := y!.geo;
    typx := x!.type;
    typy := y!.type;
    
    if ambx!.vectorspace = amby!.vectorspace then
    
        if typx > typy then
    return false;
        else
          vectors := y!.obj;
          nvectors := typy;
          mat := x!.obj;
          nrows := typx;
        fi;
      # subspaces of type 1 need to be nested to make them lists of vectors

      if nrows = 1 then mat := [mat]; fi;
      if nvectors = 1 then vectors := [vectors]; fi;

      mat := MutableCopyMat(mat);
      ncols:= amby!.dimension + 1;
      zero:= ZeroOfBaseDomain( mat );

      # here we are going to treat "vectors" as a list of basis vectors. first
      # figure out which column is the first nonzero column for each row
      nzheads := [];
      for i in [ 1 .. nvectors ] do
        row := vectors[i];
        j := PositionNonZero( row );
        Add(nzheads,j);
      od;

      # now try to reduce each row of "mat" with the basis vectors
      for i in [ 1 .. nrows ] do
        row := mat[i];
        for j in [ 1 .. Length(nzheads) ] do
            z := row[nzheads[j]];
            if z <> zero then
              AddRowVector( row, vectors[ j ], - z );
            fi;
        od;

        # if the row is now not zero then y is not a subvariety of x
        j := PositionNonZero( row );
        if j <= ncols then
            return false;
        fi;

      od;
      
      return true;
    else
      Error( "The subspaces belong to different ambient spaces" );
    fi;
    return false;
  end );


#############################################################################
# A method to check set theoretic containment for an element of a Lie geometry
# and a collection of shadow elements of a Lie geometry
#############################################################################

# new since 5/4/2018 jdb
# see also remarks at method O  \in( <x>, <dom> )
# "for an element and collection of shadow elements of an incidence structure"
#############################################################################
#O  \in( <x>, <dom> )
# returns true if <x> belongs to the elements collected in <dom> It is checked if their
# geometry matches.
##
InstallMethod( \in,
    "for an element and set of shadow elements of a Lie geometry",
    # 1*SUM_FLAGS+3 increases the ranking for this method
    # 5/4/2018: jdb wonders if the above line is necessary.
    [IsElementOfLieGeometry, IsShadowElementsOfLieGeometry],
    1*SUM_FLAGS+3,
    function( x, dom )
        return x in dom!.geometry and x!.type = dom!.type and IsIncident(x,dom!.parentflag);
    end );
#############################################################################
## Methods for random selection of elements
#############################################################################  

# CHECKED 14/09/2011 jdb.
#############################################################################
#O  Random( <subs> )
# <subs> must be a collections of subspaces of a vector space, of the same 
# dimension. Returns a random element from it.
##
InstallMethod( Random, 
 "for a collection of subspaces of a vector space",
    [ IsSubspacesVectorSpace ],
 # chooses a random element out of the collection of subspaces of given dimension of a vectorspace
 function( subs )
  local d, vspace, V, W, w;
  ## the underlying vector space
  vspace := subs!.structure;
  if not IsInt(subs!.dimension) then #here we must know that this field is "all" if it is not an integer.
   Error("The subspaces of the collection need to have the same dimension");
  fi;
  ## the common dimension of elements of subs
  d := subs!.dimension;
  V:=[];
  repeat
   w := Random( vspace );
   Add(V, w);
   W := SubspaceNC( vspace, V );
   until Dimension(W) = d;
    return W;
  end );

# CHECKED 14/09/2011 jdb.
#############################################################################
#O  RandomSubspace( <vspace>, <d> )
# <vspace> is a vector space, <d> a dimension. Returns a random subspace of 
# dimension <d>
##
InstallMethod( RandomSubspace,
 "for a vectorspace and a dimension",
 [IsVectorSpace,IsInt],
    function(vspace,d)
  local list,W,w;
        if d>Dimension(vspace) then
                Error("The dimension of the subspace is larger than that of the vectorspace");
        fi;
  if not IsPosInt(d) then
    Error("The dimension of the subspace must be at least 1!");
  fi;
        list:=[];
        repeat
   w := Random( vspace );
            Add(list, w);
            W := SubspaceNC( vspace, list );
        until Dimension(W) = d;
        return W;
 end );  

#############################################################################
# Converting element methods (added 28/11/11)
#############################################################################

# Added 28/11/2011 jdb.
# Repaired 21/6/16
#############################################################################
#O  ElementToElement( <geo>, <el> )
# returns the element VectorSpaceToElement(<geo>,UnderlyingObject(<el>))
##
InstallMethod( ElementToElement,
 "for a Lie geometry and an element of a Lie geometry",
 [IsLieGeometry, IsElementOfLieGeometry],
 function(ps,el)
  return VectorSpaceToElement(ps,Unpack(UnderlyingObject(el))); #here was a bug, there was no unpack, and there should be.
 end );

#############################################################################
# the two methods below are not yet finished, and commented out
#############################################################################

# Added 28/11/2011 jdb.
#############################################################################
#O  ConvertElement( <geo>, <el> )
# chages the element <el> to VectorSpaceToElement(<geo>,UnderlyingObject(<el>))
# with a check whether this is possible.
##
#InstallMethod( ConvertElement,
# "for a Lie geometry and an element of a Lie geometry",
# [IsProjectiveSpace, IsElementOfLieGeometry],
# function(ps,el)
#  if el in ps then
#   el!.geo := ps;
#  else
#   Error( "<el> cannot be converted to an element of <ps>");
#  fi;
#  
# end );

# Added 28/11/2011 jdb.
#############################################################################
#O  ConvertElementNC( <geo>, <el> )
# chages the element <el> to VectorSpaceToElement(<geo>,UnderlyingObject(<el>))
# *without* checks. Please use with extreme care. Belgium might get a government if you use
# this function when you shouldn't.
##
#InstallMethod( ConvertElementNC,
# "for a Lie geometry and an element of a Lie geometry",
# [IsLieGeometry, IsElementOfLieGeometry],
# function(ps,el)
#  el!.geo := ps;
# end );


#############################################################################
# elements of Lie geometries are always constructed using a spaning set for
# the underlying sub vector space. OjectToElement for Lie geometries simply 
# pipes the object to VectorSpaceToElement, which will check whether the
# object is suitable or not.
#############################################################################

# Added 31/07/2014 jdb.
#############################################################################
#O  ObjectToElement( <geo>, <type>, <obj> )
# returns the element VectorSpaceToElement(<geo>, <obj>)), and checks whether
# the type is correct.
#
InstallMethod( ObjectToElement,
 "for a Lie geometry, and integer, and an object",
 [IsLieGeometry, IsPosInt, IsObject],
 function(geom, type, obj)
  local el;
  el := VectorSpaceToElement(geom,obj);
  if type <> el!.type then
   Error("<obj> represents an element of a different type than requested");
  else
   return el;
  fi;
 end );

# Added 31/07/2014 jdb.
#############################################################################
#O  ObjectToElement( <geo>, <obj> )
# returns the element VectorSpaceToElement(<geo>, <obj>))
#
InstallMethod( ObjectToElement,
 "for a Lie geometry, and integer, and an object",
 [IsLieGeometry, IsObject],
 function(geom, obj)
  local el;
  return VectorSpaceToElement(geom,obj);
 end );


[ Dauer der Verarbeitung: 0.42 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge