예제 #1
0
def leon_rbase6():
    from permutation import Permutation
    from refinement import SubgroupFamily, PartitionStabaliserFamily, Refinement
    from partition import Partition
    from group import PermGroup
    from leon_search import PartitionBacktrackWorkhorse as PBW

    cf = Permutation.read_cycle_form
    a = cf([[2, 3], [4, 6], [5, 8], [9, 11]], 13)
    b = cf([[1, 2, 4, 7, 9, 3, 5, 6, 8, 10, 11, 12, 13]], 13)
    fam_subgroup = SubgroupFamily(PermGroup([a, b]))

    stab = Partition([[1, 3, 5, 7, 9, 11], [2, 4, 6, 8, 10, 12, 13]])
    fam_part_stab = PartitionStabaliserFamily(stab)
    size = 13

    print("Refinements: partition stabaliser refinement and subgroup refinement")
    print(
        "Desired property: partition stabaliser of [[1,3,5,7,9,11],[2,4,6,8,10,12,13]] and subgroup of <[[2,3],[4,6],[5,8],[9,11]], [[1,2,4,7,9,3,5,6,8,10,11,12,13]]>"
    )
    print("Heuristics: multi-backtrack")
    print("Search space: Sym(13)")

    fam = Refinement([fam_subgroup, fam_part_stab])
    pbw = PBW(None, fam, size)
    pbw.printing = True
    r_base = pbw._r_base()
    lookup = pbw._special_lookup
    special_levels = sorted(list(lookup.keys()))
예제 #2
0
def leon_trivial2():
    from permutation import Permutation
    from refinement import SubgroupFamily, PartitionStabaliserFamily, Refinement
    from partition import Partition
    from group import PermGroup
    from leon_search import PartitionBacktrackWorkhorse as PBW
    from coset_property import CosetProperty, SubgroupProperty, PartitionStabaliserProperty

    cf = Permutation.read_cycle_form
    a = cf([[2, 3], [4, 6], [5, 8], [9, 11]], 13)
    b = cf([[1, 2, 4, 7, 9, 3, 5, 6, 8, 10, 11, 12, 13]], 13)
    G = PermGroup([a, b])
    fam_subgroup = SubgroupFamily(G)
    prop_subgroup = SubgroupProperty(G)

    stab = Partition([[1, 2], [3, 4]])
    fam_part_stab = PartitionStabaliserFamily(stab)
    prop_part_stab = PartitionStabaliserProperty(stab)

    size = 4
    fam = Refinement([])
    prop = CosetProperty([prop_part_stab])
    pbw = PBW(prop, fam, size)
    pbw.printing = True
    pbw.multi_backtrack = True

    print("Refinements: None")
    print("Desired property: partition stabaliser of [[1,2],[3,4]]")
    print("Heuristics: multi-backtrack")
    print("Search space: Sym(4)")
    gens = pbw.find_partition_backtrack_subgroup()
    print("Generators found:")
    for gen in gens:
        print(gen)
예제 #3
0
 def test_r_base(self):
     cf = Permutation.read_cycle_form
     a = cf([[2,3],[4,6],[5,8],[9,11]], 13)
     b = cf([[1,2,4,7,9,3,5,6,8,10,11,12,13]], 13)
     fam_subgroup = SubgroupFamily(PermGroup([a,b])) 
     
     stab = Partition([[1,3,5,7,9,11],[2,4,6,8,10,12,13]])
     fam_part_stab = PartitionStabaliserFamily(stab)        
     size = 13
     
     fam = Refinement([fam_subgroup, fam_part_stab])
     pbw = PBW(None, fam, size)
     r_base = pbw._r_base()
     lookup = pbw._special_lookup
     special_levels = sorted(list(lookup.keys()))
     special_cells = [lookup[level][0] for level in special_levels]
     special_vals = [lookup[level][1] for level in special_levels]
     
     self.assertTrue(pbw.left.discrete())
     self.assertEqual(special_levels, [1,2,4])
     self.assertEqual(special_cells, [1,1,1])
     self.assertEqual(special_vals, [1,3,5])
     f = pbw.left.fix()
     b = fam_subgroup._group.base
     self.assertEqual(f[:len(b)], b)
예제 #4
0
    def test_partition_backtrack_subgroup_two_prop_subgroup_stab(self):        
        cf = Permutation.read_cycle_form
        a = cf([[3,2,6]], 7)
        b = cf([[3,2],[6,7]], 7)
        G = PermGroup([a,b])
        fam_subgroup = SubgroupFamily(G)
        prop_subgroup = SubgroupProperty(G)
        stab = Partition([[1,3,5,7],[2,4,6]])
        fam_part_stab = PartitionStabaliserFamily(stab)        
        prop_part_stab = PartitionStabaliserProperty(stab)
        
        size = 7
        fam = Refinement([fam_part_stab, fam_subgroup])
        prop = CosetProperty([prop_part_stab, prop_subgroup])
        pbw = PBW(prop, fam, size)
        
        gens = pbw.find_partition_backtrack_subgroup()
        
        found = []
        s7 = PermGroup([cf([[1,2]],7),cf([[1,2,3,4,5,6,7]],7)])
        for ele in s7._list_elements():
            if prop.check(ele):
                found.append(ele)

        self.assertEqual(len(PermGroup(gens)), len(found))     
예제 #5
0
 def test_partition_backtrack_subgroup_leon_paper(self):
     cf = Permutation.read_cycle_form
     a = cf([[2,3],[4,6],[5,8],[9,11]], 13)
     b = cf([[1,2,4,7,9,3,5,6,8,10,11,12,13]], 13)
     G = PermGroup([a,b])
     fam_subgroup = SubgroupFamily(G)
     prop_subgroup = SubgroupProperty(G)
     
     stab = Partition([[1,3,5,7,9,11],[2,4,6,8,10,12,13]])
     fam_part_stab = PartitionStabaliserFamily(stab)        
     prop_part_stab = PartitionStabaliserProperty(stab)
     
     size = 13
     fam = Refinement([fam_subgroup, fam_part_stab])
     prop = CosetProperty([prop_subgroup, prop_part_stab])
     pbw = PBW(prop, fam, size)     
     
     gens = pbw.find_partition_backtrack_subgroup()
     cand_G = PermGroup(gens)
     leon_gens = []
     leon_gens.append(cf([[2,12],[4,10],[5,7],[6,8]],13))
     leon_gens.append(cf([[2,8],[3,5],[4,6],[10,12]],13))
     leon_gens.append(cf([[1,9],[2,4],[6,8],[10,12]],13))
     leon_G = PermGroup(leon_gens)
     third_source = []
     for ele in G._list_elements():
         if prop.check(ele):
             third_source.append(ele)
     self.assertEqual(cand_G.order(), leon_G.order())
     for perm in leon_gens:
         self.assertTrue(perm in G)
         self.assertTrue(perm in cand_G)
예제 #6
0
 def test_tree_traversal(self):
     fam = Refinement([IdentityFamily()])
     prop = CosetProperty([IdentityProperty()])
     pbw = PBW(prop, fam, 4)
     pbw.printing = True
     gens = pbw.find_partition_backtrack_subgroup()
     self.assertEqual(PermGroup(gens).order(), 24)
     print(gens)
예제 #7
0
    def test_partition_backtrack_subgroup_one_prop_stab(self):
        cf = Permutation.read_cycle_form
        stab = Partition([[1,3,5],[2,4,6]])
        fam_part_stab = PartitionStabaliserFamily(stab)        
        prop_part_stab = PartitionStabaliserProperty(stab)
        
        size = 6
        fam = Refinement([fam_part_stab])
        prop = CosetProperty([prop_part_stab])
        pbw = PBW(prop, fam, size)     
        
        gens = pbw.find_partition_backtrack_subgroup()
        
        found = []
        s6 = PermGroup([cf([[1,2]],6),cf([[1,2,3,4,5,6]],6)])
        for ele in s6._list_elements():
            if prop.check(ele):
                found.append(ele)

        self.assertEqual(len(PermGroup(gens)), len(found))
예제 #8
0
    def test_partition_backtrack_subgroup_one_prop_subgroup(self):
        cf = Permutation.read_cycle_form
        a = cf([[1,2,3]], 5)
        b = cf([[1,2],[3,4]], 5)
        G = PermGroup([a,b])
        fam_subgroup = SubgroupFamily(G)
        prop_subgroup = SubgroupProperty(G)
        
        fam = Refinement([fam_subgroup])
        prop = CosetProperty([prop_subgroup])
        pbw = PBW(prop, fam, 5)
        
        gens = pbw.find_partition_backtrack_subgroup()
        
        found = []
        s5 = PermGroup([cf([[1,2]],5),cf([[1,2,3,4,5]],5)])
        for ele in s5._list_elements():
            if prop.check(ele):
                found.append(ele)

        self.assertEqual(len(PermGroup(gens)), len(found))
예제 #9
0
def leon_trivial55():
    from permutation import Permutation
    from refinement import SubgroupFamily, PartitionStabaliserFamily, Refinement
    from partition import Partition
    from group import PermGroup
    from leon_search import PartitionBacktrackWorkhorse as PBW
    from coset_property import CosetProperty, SubgroupProperty, PartitionStabaliserProperty

    cf = Permutation.read_cycle_form
    a = cf([[1, 2, 3]], 4)
    b = cf([[2, 3, 4]], 4)
    G = PermGroup([a, b])
    fam_subgroup = SubgroupFamily(G)
    prop_subgroup = SubgroupProperty(G)

    stab = Partition([[1, 2], [3, 4]])
    fam_part_stab = PartitionStabaliserFamily(stab)
    prop_part_stab = PartitionStabaliserProperty(stab)

    size = 4
    fam = Refinement([fam_subgroup, fam_part_stab])
    prop = CosetProperty([prop_subgroup, prop_part_stab])  # [prop_part_stab])
    pbw = PBW(prop, fam, size)
    pbw.printing = True
    pbw.multi_backtrack = True
    pbw.double_coset_check = False

    print("Refinements: partition stabaliser refinement and subgroup refinement")
    print("Desired property: partition stabaliser of [[1,2],[3,4]] and subgroup of alt(3)")
    print("Heuristics: multi-backtrack")
    print("Search space: Sym(4)")

    gens = pbw.find_partition_backtrack_subgroup()
    print("Generators found:")
    for gen in gens:
        print(gen)