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
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
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))
def __init__(self, pgl: PGL): self._pgl = pgl self._pf = pgl.get_pf()
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)