def pgl2_a4_2(q, a):
    '''
    q is assumed to be 5 mod 6
    '''
    pgl2 = PGL(2, q)
    field = pgl2.get_field()
    identity = pgl2.identity()
    two = field.one() + field.one()
    three = two + field.one()
    nonsquare = SquareExtensionField.get_non_square_element(field)
    nonsquare_3_roots = [
        x for x in field.get_all_elements() if three * x * x == -nonsquare
    ]
    x = nonsquare_3_roots[0]

    bs = [
        b for b in field.get_all_elements()
        if b * b - two * b * x * x + three * three * x * x * x * x +
        two * two * a * a * x * x == field.zero()
    ]

    if len(bs) == 0:
        return []
    s2_1 = pgl2.create([[a, bs[0]], [field.one(), -a]])
    s3 = pgl2.create([[x, -three * x * x], [field.one(), x]])

    s2_2 = s3 * s2_1 * s3.inverse()
    s2_3 = s2_1 * s2_2

    elements = [identity, s2_1, s2_2, s2_3]
    elements_addition = [x * s3 for x in elements]
    elements_addition += [x * s3 * s3 for x in elements]
    elements += elements_addition
    return elements
def pgl2_a4_1(q, a):
    '''
    q is assumed to be 1 mod 6
    '''
    pgl2 = PGL(2, q)
    field = pgl2.get_field()
    identity = pgl2.identity()
    unity_3_roots = [
        x for x in field.get_all_elements()
        if x * x + x + field.one() == field.zero()
    ]
    zeta = unity_3_roots[0]
    field_two = field.one() + field.one()

    s2_1 = pgl2.create([[a, field.one()], [field_two * a * a, -a]])
    if s2_1.det() == field.zero():
        return []
    s3 = pgl2.create([[zeta, field.zero()], [field.zero(), field.one()]])

    s2_2 = s3 * s2_1 * s3.inverse()
    s2_3 = s2_1 * s2_2

    elements = [identity, s2_1, s2_2, s2_3]
    elements_addition = [x * s3 for x in elements]
    elements_addition += [x * s3 * s3 for x in elements]
    elements += elements_addition
    return elements
Beispiel #3
0
def get_q_groups_from_file(filename):
    result = {}
    with open(filename) as file:
        for group_data in file:
            if group_data == '\n':
                continue
            first_comma = group_data.index(',')
            q = int(group_data[:first_comma])
            pgl = PGL(2, q)
            field = pgl.get_field()
            if q not in result:
                result[q] = []
            group_data = group_data[first_comma+4:-3]
            elements = []
            element_strings = group_data.split('], [')
            for element_string in element_strings:
                rows = element_string.split(';')
                element_data = [row.split(',') for row in rows]
                element_data = [[field.create_element(int(x)) for x in row] for row in element_data]
                element = pgl.create(element_data)
                elements.append(element)
            result[q].append(set(elements))
    return result
def pgl2_a4_0(q, a):
    '''
    q is assumed to be 3 ** k
    '''
    pgl2 = PGL(2, q)
    field = pgl2.get_field()
    identity = pgl2.identity()

    s2_1 = pgl2.create([[a, -a * a - field.one()], [field.one(), -a]])
    s3 = pgl2.create([[field.one(), field.one()], [field.zero(), field.one()]])

    s2_2 = s3 * s2_1 * s3.inverse()
    s2_3 = s2_1 * s2_2

    elements = [identity, s2_1, s2_2, s2_3]
    elements_addition = [x * s3 for x in elements]
    elements_addition += [x * s3 * s3 for x in elements]
    elements += elements_addition
    return elements
Beispiel #5
0
    e3 = pgl.create([
            [one, zero, zero],
            [zero, one, zero],
            [extension_element, one, one]
        ])

    e4 = pgl.create([
            [one, zero, zero],
            [one, one, zero],
            [zero, zero, one]
        ])

    members = {pgl.identity()}
    for k in range(8):
        for x in product([e1, e2, e3, e4], members):
            res = x[0] * x[1]
            members.add(res)
            if len(members) == 360:
                break
    return members


pgl = PGL(3, 4)
action = PGLGroupAction(pgl)
members = a6_in_psl3_4(pgl)
vector_space = action.get_acted_upon_elements()
orbit_elements = [action.apply(g, vector_space[0]) for g in members]
orbit = list(set(orbit_elements))
print(len(orbit))
Beispiel #6
0
 def __init__(self, pgl: PGL):
     self._pgl = pgl
     self._pf = pgl.get_pf()
Beispiel #7
0
from projective_sets.pxl2_subsets import psl2_a4_copies
from group_actions import PGLGroupAction
from projective_sets.pgl import PGL

qs = [3, 5, 7, 11, 23, 31, 47]

for q in qs:
    pgl = PGL(2, q)
    action = PGLGroupAction(pgl)
    field = pgl.get_pf().get_field()
    a4_copies = psl2_a4_copies(field)
    good_a4 = [a4_copies[0]]
    a4_copies.pop(0)

    if q % 8 in [1, 7]:
        while len(a4_copies) > 0 or len(good_a4) < 2:
            a4 = a4_copies[0]
            unique_a4 = True
            for element in pgl.get_all_elements():
                if element.det().legendre() != 1:
                    continue
                a4_conjugated = set([element*x*element.inverse() for x in a4])
                if a4_conjugated in good_a4:
                    unique_a4 = False
                    break
            if unique_a4:
                good_a4.append(a4)
            a4_copies.pop(0)

    for copy in good_a4:
        print(q, copy)
from utilities.q_group_from_file import get_q_groups_from_file
from group_actions.group_utiliies import get_extension_of_order_2
from projective_sets.pgl import PGL


group_copies = get_q_groups_from_file(r'results/groups_in_low_psl2q_up_to_conjugation.txt')
good_groups = {}


for q in group_copies:
    good_groups[q] = []
    pgl = PGL(2, q)
    for copy in group_copies[q]:
        extension = get_extension_of_order_2(copy, pgl, lambda x: x.det().legendre() == -1)
        good_groups[q].append(extension)
    for x in good_groups[q]:
        print(q, x)