FinInG

This page contains the commands used during the FinInG session which was held on Wednesday evening at the Fifth Irsee Conference on Finite Geometries (10-16 September 2017) by John Bamberg, Jan De Beule, and Michel Lavrauw.

The evening session was meant as a gentle introduction to the GAP-package FinInG which stands for Finite Incidence Geometry. Further information can be found on fining.org.

The main objectives are to illustrate:
1. Importing geometric objects into your GAP session
2. Performing your computations with FinInG
3. Extracting the information

The lines below can be copied and pasted onto the GAP command line.

Examples



        # First we load FinInG:
        LoadPackage("fining");
        
        
        # 1. An arc (inspired by the talk of Simeon Ball)
        q:=9;
        pg:=PG(4,q);
        eta:=First(GF(q),x->x^4=-One(GF(q)));
        vecs:=List(GF(q),t->[1,t,t^2+eta*t^6,t^3,t^4]*One(GF(q)));
        vecs:=Union([[0,0,0,0,1]*One(GF(q))],vecs);
        Garc:=List(vecs,v->VectorSpaceToElement(pg,v));
        G:=ProjectivityGroup(pg);
        H:=FiningSetwiseStabiliser(G,AsSet(Garc));
        StructureDescription(H);
        
        # let's check that this is an arc
        hyps:=Hyperplanes(pg);
        ints:=[];
        for h in hyps do
        Add(ints,Size(Filtered(Garc,x->x in h)));
        od;
        AsSet(ints);
        Collected(ints);
        
        # a shortcut for the last check would be
        Collected( List( Hyperplanes(pg), h -> Number(Garc, x -> x * h) ) );
        
        
        # 2. A cubic surface and the 27 lines on it (inspired by the talk of Anton Betten)
        q:=7;
        pg:=PG(3,q);
        r:=PolynomialRing(GF(q),4);
        f:=r.1^2*r.4+r.2^2*r.3+3*r.2*r.3^2+r.1*r.4^2+3*r.1*r.2*r.3+2*r.1*r.2*r.4+3*r.2*r.3*r.4;
        Csur:=AlgebraicVariety(pg,[f]);
        pts:=AsList(Points(Csur));;
        lines:=Filtered(Lines(pg),l->Number(Points(l),x->x in Csur)=q+1);
        Size(lines);
        
        
        # 3. Klein quadric (a "classic")
        q:=7;
        k := KleinCorrespondence( q );
        Q:=Range(k);
        ps:=AmbientGeometry(Q);
        PolarSpaceType(ps);
        EquationForPolarSpace(ps);
        TypesOfElementsOfIncidenceStructure(ps);
        l1:=Random(Lines(PG(3,q)));
        l2:=First(Lines(PG(3,q)),line->Dimension(Span(l1,line))=3);
        p1:=l1^k;p2:=l2^k;
        IsCollinear(ps,p1,p2);
        l3:=First(Lines(PG(3,q)),line->Dimension(Span(l1,line))=2);
        p3:=l3^k;
        IsCollinear(ps,p1,p3);
        Lines(p1);
        Planes(p1);
        IsomorphismPolarSpaces(ps,HyperbolicQuadric(5,q));
        CollineationGroup(HyperbolicQuadric(5,q));
        
        
        # 4. Partial spreads of H(5,4) (inspired by work of De Beule and Metsch)
        ps := HermitianPolarSpace(5,4);
        planes := AsList(Planes(ps));;
        coll := CollineationGroup(ps);
        adj := function(x,y)
        return ProjectiveDimension(Meet(x,y))=-1;
        end;
        graph := Graph(coll,planes,OnProjSubspaces,adj,true);;
        cliques := CompleteSubgraphs(graph);;
        Length(cliques);
        List(cliques,x->Length(x));
        Collected(last);
        cliques9 := CompleteSubgraphs(graph,9,2);
        partial_spreads := List(cliques9,x->VertexNames(graph){x});;
        partial_spreads[1];
        List(partial_spreads[1],x->Unpack(UnderlyingObject(x)));
        groups := List(partial_spreads,x->FiningSetwiseStabiliser(coll,x));
        List(groups,x->Order(x));
        StructureDescription(groups[3]);