Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/fining/lib/   (GAP Algebra Version 4.15.1©)  Datei vom 27.6.2023 mit Größe 22 kB image not shown  

Quelle  orbits-stabilisers.gi   Sprache: Shell

 

#############################################################################
##
##  orbits-stabilizers.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 placeholders of orbits/stabilizer functions
##
#############################################################################
##
## 11/02/13 ml
## These methods have been tested on all projective spaces and classical polar spaces
## The champion in ALL cases is FiningStabiliserOrb ... BY FAR!!! using the ORB 
## package command ORB_EstimateOrbitSize.
## Next fastest method is the FiningStabiliser using the Stab method from the ORB package.
## There are small cases where the FiningStabiliserPerm (using permutation representation)
## seems to perform better than the FiningStabiliser (e.g. hyperbolic in 3 dimensions, parabolic in 2 dimensions,
## and elliptic in three dimensions). The FiningStabiliserPerm2 seems to be a bit faster
## in some small dimensional hermitian cases (e.g. H(3,5^2), H(2,7^2), H(2,9^2)), but
## in all other cases the FiningStabiliser is the faster.
##
## 
#############################################################################


############################################################
# ORBITS
###################################################


# 26/03/14 CHECKED ml
#############################################################################
#O  FiningOrbit( <g>, <e>, <act> )
#  returns the orbit of e under g, using action function act.
##
InstallMethod( FiningOrbit,
 "for a collineation group, an element of a projective space and an action function",
 [ IsProjectiveGroupWithFrob, IsElementOfIncidenceStructure, IsFunction],
 function(g,e,act)
  return Enumerate(Orb(g,e,act));
 end );

# ADDED 26/03/14 ml
# CHANGED 08/04/14 jb
#############################################################################
#O  FiningOrbit( <g>, <e> )
#  returns the orbit of e under g. It is assumed that e is a subspace of a projective space
# and g a collineation group, such that OnProjSubspaces will be the natural action to use.
##
InstallMethod( FiningOrbit,
 "for a collineation group, an element of a projective space",
 [ IsProjectiveGroupWithFrob,  IsSubspaceOfProjectiveSpace ],
 function(g,e )
  return FiningOrbit(g,e,OnProjSubspaces);
 end );

# ADDED 08/04/14 jb
#############################################################################
#O  FiningOrbit( <g>, <e> )
#  returns the orbit of e under g. It is assumed that e is a subspace of a affine space
# and g a collineation group, such that OnAffineSubspaces will be the natural action to use.
##
InstallMethod( FiningOrbit,
 "for a collineation group, an element of a affine space",
 [ IsProjectiveGroupWithFrob,  IsSubspaceOfAffineSpace ],
 function(g,e )
  return FiningOrbit(g,e,OnAffineSubspaces);
 end );
 
# 26/03/14 CHECKED ml
#############################################################################
#O  FiningOrbit( <g>, <e>, <act> )
#  returns the orbit of e under g, using action function act.
##
InstallMethod( FiningOrbit,
 "for a collineation group, an element of a projective space and an action function",
 [ IsProjectiveGroupWithFrob, CategoryCollections(IsElementOfIncidenceStructure), IsFunction],
 function(g,e,act)
  return Enumerate(Orb(g,e,act));
 end );


# ADDED 26/03/14 ml
#############################################################################
#O  FiningOrbit( <g>, <e> )
#  returns the orbit of e under g. It is assumed that e is a subspace of a projective space
# and g a collineation group, such that OnProjSubspaces will be the natural action to use.
##
InstallMethod( FiningOrbit,
 "for a collineation group, an element of a projective space",
 [ IsProjectiveGroupWithFrob, CategoryCollections(IsElementOfIncidenceStructure) ],
 function(g,e )
  return FiningOrbit(g,e,OnProjSubspaces);
 end );

# CHECKED 26/03/14 ml
# CHANGED 08/04/14 jb
#############################################################################
#O  FiningOrbits( <g>, <e>, <act> )
#  returns the orbits of e under g, using action function act.
##
InstallMethod( FiningOrbits,
 "for a group, a homogeneous list, and an action function",
 [ IsGroup, IsHomogeneousList, IsFunction],
 function(g,set,action)
 local orbs, set2, x, o, upto, newupto;
 orbs := [];
 set2 := ShallowCopy(set);
 set2 := Set(set2);;
 upto := 0;
 repeat
  x := set2[1];
  o := Enumerate(Orb(g, x, action));
  Add(orbs, o);
  SubtractSet(set2, AsList(o));
        newupto := Int(100 * (Size(set)-Size(set2))/Size(set));
  if newupto <> upto then
   upto:=newupto;
   if InfoLevel(InfoFinInG) > 0 then
    Print(upto, "%..\c");
   fi;
  fi;
 until IsEmpty(set2);
 return orbs;
 end );

# ADDED 21/06/16 jdb
#############################################################################
#O  FiningOrFiningOrbitsDomainbits( <g>, <e>, <act> )
#  returns the orbits of e under g, using action function act. We follow the
#  analogy of GAP: Domain when <e> is closed under the action of g. If you do
#  not know whether this is true, you should use FiningOrbits.
##
InstallMethod( FiningOrbitsDomain,
    "for a group, a collection and a function",
    true,
    [ IsGroup, IsElementsOfIncidenceGeometry, IsFunction ],
    0,
    function(G,col,act)
    local blist,D,x,pos,orbs,next,orb;
    D := AsSet(col);
    blist := BlistList( [ 1 .. Length( D ) ], [  ] );
    orbs := [  ];
    for next in [1..Length(D)] do
      if blist[next]=false then
        orb := Enumerate(Orb(G, D[next], act));
        for x in orb do
            pos := Position(D,x);
            blist[pos] := true;
        od;
        Add( orbs, orb );
      fi;
    od;
    return Immutable( orbs );
    end );

# ADDED 26/03/14 ml
# CHANGED 08/04/14 jb
#############################################################################
#O  FiningOrbits( <g>, <e> )
#  returns the orbits of e under g. It is assumed that e is a subspace of a projective space
# and g a collineation group, such that OnProjSubspaces will be the natural action to use.
##
InstallMethod( FiningOrbits,
 "for a collineation group, elements of a projective space",
 [ IsProjectiveGroupWithFrob,  IsSubspaceOfProjectiveSpaceCollection and IsHomogeneousList  ],
 function(g,e )
  return FiningOrbits(g,e,OnProjSubspaces);
 end );

# ADDED 08/04/14 jb
#############################################################################
#O  FiningOrbits( <g>, <e> )
#  returns the orbits of e under g. It is assumed that e is homogeneous list of affine spaces
# and g a collineation group, such that OnAffineSubspaces will be the natural action to use.
##
InstallMethod( FiningOrbits,
 "for a collineation group, elements of an affine space",
 [ IsProjectiveGroupWithFrob, IsSubspaceOfAffineSpaceCollection and IsHomogeneousList ],
 function(g,e )
  return FiningOrbits(g,e,OnAffineSubspaces);
 end );

# ADDED 14/04/14 jb
#############################################################################
#O  FiningOrbits( <g>, <e> )
#  returns the orbits on e under g. It is assumed that e is a collection of subspaces of a projective space
#  and g a collineation group, such that OnProjSubspaces will be the natural action to use.
##
InstallMethod( FiningOrbits,
 "for a collineation group, elements-collection of a projective space",
 [ IsProjectiveGroupWithFrob,  IsSubspacesOfProjectiveSpace ],
 function(g,e )
  return FiningOrbits(g,AsList(e),OnProjSubspaces);
 end );
 
# ADDED 14/04/14 jb
########################################java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
#O  FiningOrbits( <g>, <e<CRightInverse<</A)/>
#  returns the orbits on e under g. It is java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 9
#  and g a collineation group, such that <Q>Straightforward</Q> if one knows how to of
##
InstallMethod  affine ,and  computeinverses of
 "for a collineation group, elements-collection of an affine space",
 [ IsProjectiveGroupWithFrob,  IsSubspacesOfAffineSpace ],
 function(g,e )
  return FiningOrbits(g,AsList(e),java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 0
 end );

# ADDED 14/04/14 jb
#############################################################################
#O  FiningOrbits( <g>, <e> )
#  returns the orbits on e under g. It is assumed that e is a shadow space of projective spaces
# and g a collineation group, such java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 34
##
InstallMethod( FiningOrbits,
 "for a collineation group, shadow space of a projective space"  Itemjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
  , IsShadowSubspacesOfProjectiveSpace
 function(g,e )
  return order P>
 end );

# ADDED 14/04/14 jb
############################Find   of A<A> is a product   .
#O  FiningOrbits( <g>, <e> )
#  returns      cycles <>prod_{=}l tau_{r_1m_1)()}</Mjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
# java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 92
##
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 28
 "for a collineation group, shadow space of an affine space",
 [ IsProjectiveGroupWithFrob, IsShadowSubspacesOfAffineSpace ],
 function(g,e )
  return FiningOrbits(g,AsList(e),OnAffineSubspacesof  <>k<A>fold
 end );
 
# ADDED 14/length on therefined  which one  from<>mathcalP/>
#############################################################################
#O  FiningOrbits( <g>, <e> )
#  returns the orbits on e under g. It is assumed that e is a shadow space of a polar space
# java.lang.StringIndexOutOfBoundsException: Range [55, 5) out of bounds for length 90
##
InstallMethod( FiningOrbits,
 "for mod M><M). Finally  the resulting permutation
 [ IsProjectiveGroupWithFrob, IsShadowSubspacesOfClassicalPolarSpace ],
 unctionge java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
  return FiningOrbits(g,AsList(e),OnProjSubspaces);
 endOther cases seem  bemoredifficultandarecurrentlynotcovered.

# ADDED 14/04/14 jb
#########################################################
#O  FiningOrbits( <g>, <e> )
#  returns java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 8
# and g a <C>RotationFactor>g<><C
##
InstallMethod( FiningOrbits,
 collineation , classof  affinespace,
 [ IsProjectiveGroupWithFrob, IsParallelClassOfAffineSpace ],
 function(g,e )
  eturnFiningOrbitsgAsListe,);
 end );


############################################################
#     Q>/>java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
###############

# # 29/03/14 CHECKED jb
#############################################################################
#O  FiningElementStabiliserOp( <g>, <e>, <act> )
# helper operation, returns the stabiliser of e under g, using action function act.
##
InstallMethod( FiningElementStabiliserOp,
 "for a collineation<>(A>/></>
 [ IsGroup, IsElementOfIncidenceStructure, IsFunction],
 
 # JB: 13/04/14
 # Not happy with this/Mark>
 # (1) the record "size" is wrong. It should be the degree
 # (2) it assumes -only / operations.
 
 function(g,e,act)
  local t,size, stab;
  t := e!.type;
  size := Size(ElementsOfIncidenceStructure(e!.java.lang.StringIndexOutOfBoundsException: Range [0, 50) out of bounds for length 0
  stab := Stab(g,e,act,rec( Size:=Size(g), DoEstimate := size )).stab;
  return stab;
  
 end );
  
# # 26/03/14 CHECKED ml
#############################################################################
#O  FiningStabiliser( <g>, <e> )
# returns stabiliserofe  g It is assumed  is subspace of a projective space
# and g a collineation group, such that OnProjSubspaces will be the natural action to use.
# then the</ark>
##
InstallMethod( FiningStabiliser, 
 "for a collineation group and a subspace of a projective space",
 [ IsProjectiveGroupWithFrob, IsSubspaceOfProjectiveSpace],
 /Item
 return FiningElementStabiliserOp(fining_group,el,OnProjSubspaces)
end );

# # 29/03/14 CHECKED jb
##################################<>ShiftsDownOn(<A></)/C,&;<>(A</></C>
#O  FiningStabiliser( <g>, <e> )
# returns thejava.lang.StringIndexOutOfBoundsException: Range [0, 14) out of bounds for length 9
# and g a Straightforward coefficient- and residue class operations.
# then the FiningElementStabiliserOp is called.
##
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 9
 "for a collineation group and a subspace of a affine space",
 [ IsProjectiveGroupWithFrob, IsSubspaceOfAffineSpace],
 function(ining_groupel)
 return FiningElementStabiliserOp(fining_group,el,OnAffineSubspaces);
end );

# # 26/03/14 CHECKED
#############################################################################
#O  Looks for fixed affine partialmappings powers
# returns the stabiliser of e under g.
#Thisuses  ORB_EstimateOrbitSize command from the RBpackage,and it
# it is extremely fast. Much faster than the other java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 9
# again the natural action OnProjSubspaces<>
##
InstallMethod( <C>ShortCyclesA><A,A><A>,>axlng/><C>, &;
 [<C>ShortCycles<>gA>,AS</A>,<A>maxlng</A>,<Amaxn</></>
 function(fining_group,el)
stabjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
   : (fining_group,ORB_EstimateOrbitSizeProductReplacer(ining_group)el,151000000,60000)Sgens);
 return stab;
end );

# # 29/03/14 CHECKED java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
#############
#O  FiningStabiliserOrb( <g>, <e<Mark>
# returns the stabiliser of e under g.
# This uses the ORB_EstimateOrbitSize command from the ORB package, and it
# it is extremely fast.Muchfasterthan the methods here  ALL casesjava.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
#  naturalactionOnAffineSubspaces is ssumed
##
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 9
 [IsProjectiveGroupWithFrob, IsSubspaceOfAffineSpace],
 unctionf,)
  local stab;
  stab := java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 9
 return java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
end );

# # 26/03/14 CHECKED jb
#################################
#O  FiningSetwiseStabiliser( <g>, <set> )
# returns the setwise stabiliser of set under g.
# This uses <Mark>
# assumed.
##
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 8
 "Different --see  code  F>kg///rcwamap.i/>.
 [IsProjectiveGroupWithFrob,  IsSubspaceOfProjectiveSpaceCollection and IsHomogeneousList<Item>
 function(g,set)
  local stab;
  stab := SetwiseStabilizer(g, java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 8
  SetParentstab,g)#  Max forgot to   command in his code
  return stab;
end );

# # 29/03/14 CHECKED jb
#############################Different methods- see ourcecodein <>kg/cwa/librcwagrpgi/>
#O  FiningSetwiseStabiliser(</Item>
# returns the setwise stabiliser of set under g.
# This uses SetwiseStabilizer from the orb package. java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 8
#assumed.
##
InstallMethod( FiningSetwiseStabiliser,
 "for a set of elements of an affine space of a given type",
 [IsProjectiveGroupWithFrob,  IsSubspaceOfAffineSpaceCollection and IsHomogeneousListEvaluation ofthe  expression.
 function(g,set)
  local stab;
  stab := SetwiseStabilizer(g, OnAffineSubspaces  !,seeTheoremnbsp2.12.
  SetParent(    in <Cit="java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 33
  return
end );

############
# Stabiliser methods java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 9
################################


# 27/03/14 CHECKED ml
InstallMethod( FiningStabiliserPerm, [IsProjectiveGroupWithFrob, IsElementOfIncidenceStructure  
 # this uses the ActionHomomorphism and<STRONGLY&uscoreCONNECTED;&DIGRAPH/>java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
  function(fining_group,el)
  local type,geo,hom,enum,nr,stab,gens,x;
  type:=el!.type;
  geo:=el!.geo;
  hom:=ActionHomomorphism(fining_group,ElementsOfIncidenceStructure(geo,type),OnProjSubspaces);
  enum:=HomeEnumerator(UnderlyingExternalSet(hom));;
  nr:=Position(enum,el);
  stab:=Stabilizer(Image(hom),nr); 
  gens:=GeneratorsOfGroup(stab);;
  gens:=List(gens,x->PreImagesRepresentative(hom,x));
  stab:=GroupWithGenerators(gens);
  return stab;
end );

# 27/03/14 CHECKED ml
InstallMethod( FiningStabiliserPerm2, 
 [IsProjectiveGroupWithFrob, IsElementOfIncidenceStructure],
 # this uses the Stab method from the genss package AND the ActionHomomorphism
  function(fining_group,el)
  local type,geo,hom,enum,nr,size,stab,gens,x,im;
  type:=el!.type;
  geo:=el!.geo;
  hom:=ActionHomomorphism(fining_group,ElementsOfIncidenceStructure(geo,type),OnProjSubspaces);
  enum:=HomeEnumerator(UnderlyingExternalSet(hom));;
  nr:=Position(enum,el);
  size:=Size(ElementsOfIncidenceStructure(geo,type));
  im:=Image(hom);
  SetSize(im,Size(fining_group));
  stab:=Stab(im,nr,OnPoints,rec( DoEstimate := size )).stab;
  #stab:=Stabiliser(Image(hom),nr);
  gens:=GeneratorsOfGroup(stab);;
  gens:=List(gens,x->PreImagesRepresentative(hom,x));
  stab:=GroupWithGenerators(gens);
  return stab;
end );


# 27/03/14 CHECKED ml
InstallMethod( FixedSubspaces,
 "for a projectivity and a projective space",
 [IsProjectiveGroupWithFrob, IsProjectiveSpace],
 # fixed subspaces by John.
 function(g,pg)
 local gens, md, fixed, flag;
 gens := GeneratorsOfGroup(g);
 flag := ForAll(gens, t -> IsOne(t!.frob));
 if not flag then
  Error("Group contains field automorphisms.");
 fi;
 md := GModuleByMats(List(gens,t->Unpack(t!.mat)), pg!.basefield);
 fixed := Filtered(MTX.BasesSubmodules(md),t->not Size(t) in [0,Rank(pg)+1]);
 return List(fixed,t->VectorSpaceToElement(pg,t));
end );


# ADDED 24/05/16 ml+pc
InstallMethod( ProjectiveStabiliserGroupOfSubspace,
 "for a subspace of a projective space",
[IsSubspaceOfProjectiveSpace],
function(sub)

local t,pg,n,F,b1,V,comp,b2,bas,basechangeproj,G1,G2,N1,N2,
genlist,A,B,mat,i,I1,I2,pgenlist,newgenlist,stab,q;

t:=ProjectiveDimension(sub)+1;
pg:=AmbientSpace(sub);
n:=ProjectiveDimension(pg)+1;
F:=pg!.basefield;
b1:=Unpack(sub!.obj);
# basis change!
V:=UnderlyingVectorSpace(pg);
comp:=ComplementSpace(V,sub!.obj);
b2:=Basis(comp);
bas:=Concatenation(b1,b2);
basechangeproj:=Projectivity(pg,bas);
G1:=GL(t,F); G2:=GL(n-t,F);
N1:=NullMat(t,n-t,F); N2:=NullMat(n-t,t,F);
genlist:=[];
forjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
    mat:=[];
    for i in [1..t] do Add(mat,Concatenation(A[i],N1[i]));
    od;
    for i in [1..n-t] do Add(mat,Concatenation(N2[i],B[i]));
    od;
    Add(genlist,mat);
od;od;
N2[1,1]:=One(F); I1:=IdentityMat(t,F); I2:=IdentityMat(n-t,F);
mat:=[];
for i in [1..t] do Add(mat,Concatenation(I1[i],N1[i]));
od;
for i in [1..n-t] do Add(mat,Concatenation(N2[i],I2[i]));
od;
Add(genlist,mat);
pgenlist:=List(genlist,g->Projectivity(g,F));
newgenlist:=List(pgenlist,x->x^basechangeproj);
stab:=Group(newgenlist);
SetParent(stab,ProjectivityGroup(pg));
q:=Size(F);
SetSize(stab, Size(G1)*Size(G2)*q^(t*(n-t))/(q-1));
return stab;
#return Subgroup(ProjectivityGroup(pg),newgenlist);
end );


# ADDED 25/05/16 ml+pc
InstallMethod( StabiliserGroupOfSubspace,
 "for a subspace of a projective space",
[IsSubspaceOfProjectiveSpace],
function(sub)

local t,pg,n,F,b1,V,comp,b2,bas,basechangeproj,G1,G2,N1,N2,
genlist,A,B,mat,i,I1,I2,pgenlist,newgenlist,stab,q,frob,frobgens,pow;

t:=ProjectiveDimension(sub)+1;
pg:=AmbientSpace(sub);
n:=ProjectiveDimension(pg)+1;
F:=pg!.basefield;
b1:=Unpack(sub!.obj);
# basis change!
V:=UnderlyingVectorSpace(pg);
comp:=ComplementSpace(V,sub!.obj);
b2:=Basis(comp);
bas:=Concatenation(b1,b2);
basechangeproj:=Projectivity(pg,bas);
G1:=GL(t,F); G2:=GL(n-t,F);
N1:=NullMat(t,n-t,F); N2:=NullMat(n-t,t,F);
genlist:=[];
for A in GeneratorsOfGroup(G1) do for B in GeneratorsOfGroup(G2) do
    mat:=[];
    for i in [1..t] do Add(mat,Concatenation(A[i],N1[i]));
    od;
    for i in [1..n-t] do Add(mat,Concatenation(N2[i],B[i]));
    od;
    Add(genlist,mat);
od;od;
N2[1,1]:=One(F); I1:=IdentityMat(t,F); I2:=IdentityMat(n-t,F);
mat:=[];
for i in [1..t] do Add(mat,Concatenation(I1[i],N1[i]));
od;
for i in [1..n-t] do Add(mat,Concatenation(N2[i],I2[i]));
od;
Add(genlist,mat);
# We now make collineations and add Frobenius
frob := FrobeniusAutomorphism(F);
frobgens := List(genlist,x->[x,frob^0]);
if not IsOne(frob) then
 Add(frobgens,[IdentityMat(n,F),frob]);
fi; 
pgenlist := ProjElsWithFrob(frobgens);
newgenlist:=List(pgenlist,x->x^basechangeproj);
stab:=GroupWithGenerators(newgenlist);
SetParent(stab,CollineationGroup(pg));
q:=Size(F);
pow := LogInt(q, Characteristic(F));
SetSize(stab, pow*Size(G1)*Size(G2)*q^(t*(n-t))/(q-1));
return stab;
end );

# ADDED 25/05/16 ml+pc
InstallMethod( SpecialProjectiveStabiliserGroupOfSubspace,
 "for a subspace of a projective space",
[IsSubspaceOfProjectiveSpace],
function(sub)

local t,pg,n,F,b1,V,comp,b2,bas,basechangeproj,G1,G2,N1,N2,
genlist,A,B,mat,i,I1,I2,pgenlist,newgenlist,stab,q,det;

t:=ProjectiveDimension(sub)+1;
pg:=AmbientSpace(sub);
n:=ProjectiveDimension(pg)+1;
F:=pg!.basefield;
b1:=Unpack(sub!.obj);
# basis change!
V:=UnderlyingVectorSpace(pg);
comp:=ComplementSpace(V,sub!.obj);
b2:=Basis(comp);
bas:=Concatenation(b1,b2);
basechangeproj:=Projectivity(pg,bas);
G1:=GL(t,F); G2:=GL(n-t,F);
N1:=NullMat(t,n-t,F); N2:=NullMat(n-t,t,F);
genlist:=[];
for A in GeneratorsOfGroup(G1) do for B in GeneratorsOfGroup(G2) do
    mat:=[];
    for i in [1..t] do Add(mat,Concatenation(A[i],N1[i]));
    od;
    for i in [1..n-t] do Add(mat,Concatenation(N2[i],B[i]));
    od;
# make sure we are in SL
    det:=DeterminantMat(mat)^-1;
    mat[1]:=det*mat[1]; # rescale first row
    Add(genlist,mat);
od;od;
N2[1,1]:=One(F); I1:=IdentityMat(t,F); I2:=IdentityMat(n-t,F);
mat:=[];
for i in [1..t] do Add(mat,Concatenation(I1[i],N1[i]));
od;
for i in [1..n-t] do Add(mat,Concatenation(N2[i],I2[i]));
od;
Add(genlist,mat);
pgenlist:=List(genlist,g->Projectivity(g,F));
newgenlist:=List(pgenlist,x->x^basechangeproj);
stab:=Group(newgenlist);
SetParent(stab,SpecialProjectivityGroup(pg));
q:=Size(F);
SetSize(stab, Size(G1)*Size(G2)*q^(t*(n-t))/(q-1)/Gcd(n,q-1));
return stab;
end );

Messung V0.5 in Prozent
C=100 H=95 G=97

¤ Dauer der Verarbeitung: 0.347 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.