Ask Your Question
1

How do the points that PGL acts on correspond to the elements of ProjectiveSpace

asked 2022-05-30 19:27:17 +0100

brettpim gravatar image

updated 2022-05-30 19:34:29 +0100

I would like to find the (set-wise) stabilizer of a non-conic oval in PG(2,32). I have generated the points of the oval as points of ProjectiveSpace(2,GF(32)). PGL(3,32) however, is a permutation group acting on $[1,\ldots,1057]$. PGL has not yet been implemented as a group of $n \times n$ matrices so I will need to correctly map the points of ProjectiveSpace(2,GF(32)) to $[1,\ldots,1057]$. Does anyone know how they correctly correspond?

edit retag flag offensive close merge delete

Comments

1 Answer

Sort by ยป oldest newest most voted
1

answered 2022-06-02 21:44:25 +0100

brettpim gravatar image

updated 2022-06-02 21:46:49 +0100

I think it is probably easier to just directly generate a version of PGL that does act on the points of ProjectiveSpace. This code generates the collineation group of ProjectiveSpace and PGL as a subgroup of it.

def matrix_as_permutation(projective_space,M):
    points_to_process = [point for point in projective_space]
    assert M.is_invertible(), "matrix must be invertible"
    assert len(points_to_process[0]) == M.nrows(), "dimension of space and matrix must match"
    perm = []
    while(len(points_to_process)>0):
        point = points_to_process[0]
        cycle = [point]
        points_to_process.remove(point)
        next = M*point
        while(next != point):
            cycle.append(next)
            points_to_process.remove(next)
            next=M*next
        perm.append(tuple(cycle))
    return(perm)

def frobenius_as_permutation(projective_space):
    points_to_process = [point for point in projective_space]
    F = projective_space.base()
    p = F.characteristic()
    perm = []
    while(len(points_to_process)>0):
        point = points_to_process[0]
        cycle = [point]
        points_to_process.remove(point)
        next = projective_space([x^p for x in point])
        while(next != point):
            cycle.append(next)
            points_to_process.remove(next)
            next=projective_space([x^p for x in next])
        perm.append(tuple(cycle))
    return(perm)


def collineation_and_projective_linear_group(n,F):
    ps = ProjectiveSpace(n-1,F)
    L1 = [[0 for j in range(n)] for i in range(n)]
    L1[0][0]=-1
    for i in range(n-1):
        L1[i][i+1] = -1
    L1[n-1][0]=1
    M1 = matrix(F,L1)
    g1 = matrix_as_permutation(ps,M1)
    a = F.multiplicative_generator()
    L2 = [[0 for j in range(n)] for i in range(n)]
    L2[0][0] = a
    for i in range(1,n):
        L2[i][i] = 1
    M2 = matrix(F,L2)
    g2 = matrix_as_permutation(ps,M2)
    g3 = frobenius_as_permutation(ps)
    coll = PermutationGroup(gens=[g1,g2,g3])
    pgl = coll.subgroup(gens=[g1,g2])
    return((coll,pgl))
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2022-05-30 19:27:17 +0100

Seen: 289 times

Last updated: Jun 02 '22