# Select a prime power q < 15. q:=8; # We construct the projective space PG(3,q) with point set [1,2,..,q^3+q^2+q+1] # and line set lines. v:=q^3+q^2+q+1; if q=2 then N:=4; fi; if q=3 then N:=6; fi; if q=4 then N:=4; fi; if q=5 then N:=7; fi; if q=7 then N:=6; fi; if q=8 then N:=4; fi; if q=9 then N:=19; fi; if q=11 then N:=6; fi; if q=13 then N:=9; fi; g:=AllPrimitiveGroups(DegreeOperation,v)[N]; h:=Stabilizer(g,[1,2],OnSets); Orbs:=Orbits(h,[1..v]); Orbs2:=Filtered(Orbs,x->Size(x) in [2,q-1]); line:=Union(Orbs2); lines:=Orbit(g,line,OnSets); # Inside the projective space PG(3,q), we construct a hyperbolic quadric hyp. line1:=line; help:=Filtered(lines,x->Intersection(x,line)=[]); line2:=help[1]; help:=Filtered(lines,x->Intersection(x,Union(line1,line2))=[]); line3:=help[1]; help:=Filtered(lines,x->Intersection(x,line1)<>[] and Intersection(x,line2)<>[] and Intersection(x,line3)<>[]); hyp:=Union(help); # We construct the set of external, secant and tangent lines with respect to this # hyperbolic quadric. Externals:=Filtered(lines,x->Size(Intersection(x,hyp))=0); Secants:=Filtered(lines,x->Size(Intersection(x,hyp))=2); T1:=Filtered(lines,x->Size(Intersection(x,hyp))=1); T0:=Filtered(lines,x->Size(Intersection(x,hyp))=q+1); Tangents:=Union(T0,T1); # We write the tangent lines to the file ``lines’’. We first implement a function # which allows to write the contents of a list ``L’’ to a file ``name’’. WriteListToFile := function(L, name) local f, l, p; f := OutputTextFile(name, false); for l in L do for p in l do AppendTo(f, p , " "); od; AppendTo(f, "\n"); od; CloseStream(f); end; WriteListToFile(Tangents, "Desktop/lines"); # The file Tangent.sage must now be executed by Sage who will use the information # contained in the file ``lines’’ to determine the ovoids of the subgeometry # of PG(3,q) determined by the tangent lines.