Пример #1
0
def dim_fancy_relation(degree):
    admissible_words = cl.generate_Words(degree)
    size = 0
    for i in range(2, degree - 1):
        size += (2**(i - 2)) * (2**(degree - i - 2))
    A = np.zeros([len(admissible_words), size])
    current_column = 0
    for i in range(2, degree - 1):
        deg_i_words = cl.generate_Words(i)
        for v in deg_i_words:
            v_word = cl.Word([1], [v])
            deg_n_minus_i_words = cl.generate_Words(degree - i)
            for w in deg_n_minus_i_words:
                result = v_word.fancy_shuffle(cl.Word([1], [w]))
                for k in range(len(result.word)):
                    a = admissible_words.index(result.word[k])
                    A[a, current_column] = result.q[k]
                current_column += 1
    S = np.linalg.svd(A.astype(int))[1]
    rank = 0
    for i in S:
        if abs(i) > 0.01:
            rank += 1

    return rank  #len(A.rref()[1])
Пример #2
0
def check_if_new_relatiion(relation):
    relation.simplify()
    degree = len(relation.word[0])
    admissible_words = cl.generate_Words(degree)
    #Fill the b vector
    b = np.zeros([len(admissible_words), 1])
    for i in range(len(relation.word)):
        a = admissible_words.index(relation.word[i])
        b[a] = relation.q[i]

    A = np.zeros([len(admissible_words), (degree - 2) * (2**(degree - 3))])
    current_column = 0
    for n in range(1, degree - 1):
        deg_n_words = cl.generate_Words(degree - n)
        deg_n_forests = cl.generate_Fn(n)
        for j in range(len(deg_n_forests)):
            for i in range(len(deg_n_words)):
                result = deg_n_forests[j](cl.Word([1], [deg_n_words[i]]))
                result.simplify()
                for k in range(len(result.word)):
                    a = admissible_words.index(result.word[k])
                    A[a, current_column] = result.q[k]

                current_column += 1
    if len(sp.Matrix(A.astype(int)).rref()[1]) < len(
            sp.Matrix(np.concatenate((A, b), axis=1).astype(int)).rref()[1]):
        return True
    else:
        return False
Пример #3
0
def compare_tree_fancy(degree):
    admissible_words = cl.generate_Words(degree)
    size = 0
    for i in range(2, degree - 1):
        size += (2**(i - 2)) * (2**(degree - i - 2))
    cutoff = size
    size += (2**(degree - 3)) * ((degree - 1) // 2)
    A = np.zeros([len(admissible_words), size])

    current_column = 0
    for i in range(2, degree - 1):
        deg_i_words = cl.generate_Words(i)
        for v in deg_i_words:
            v_word = cl.Word([1], [v])
            deg_n_minus_i_words = cl.generate_Words(degree - i)
            for w in deg_n_minus_i_words:
                result = v_word.fancy_shuffle(cl.Word([1], [w]))
                for k in range(len(result.word)):
                    a = admissible_words.index(result.word[k])
                    A[a, current_column] = result.q[k]
                current_column += 1

    for i in range(1, (degree + 1) // 2):
        deg_i_words = cl.generate_Words_Hy(i)
        deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 1)
        for v in deg_i_words:
            v_word = cl.Word([1], [v])
            for w in deg_n_minus_i_words:
                result = kawashima_1(v_word, cl.Word([1], [w]))
                result.simplify()
                for k in range(len(result.word)):
                    a = admissible_words.index(result.word[k])
                    A[a, current_column] = result.q[k]
                current_column += 1

    fancy_matrix = A[:, :cutoff]
    kaw_matrix = A[:, cutoff:]
    S = np.linalg.svd(A.astype(int))[1]
    K = np.linalg.svd(kaw_matrix.astype(int))[1]
    F = np.linalg.svd(fancy_matrix.astype(int))[1]
    rank = 0
    rank_K = 0
    rank_F = 0
    for i in S:
        if abs(i) > 0.01:
            rank += 1
    for i in K:
        if abs(i) > 0.01:
            rank_K += 1
    for i in F:
        if abs(i) > 0.01:
            rank_F += 1
    return ("Total dim:", rank, "Kawashima dim:", rank_K, "Fancy dim:", rank_F,
            "intersect", rank_K + rank_F - rank)  # len(A.rref()[1])
Пример #4
0
def dim_kaw(degree):
    admissible_words = cl.generate_Words(degree)
    if degree >= 4:
        size = (2**(degree - 3)) * ((degree - 1) // 2) + (2**(degree - 4)) * (
            (degree - 2) // 2)
    else:
        size = (2**(degree - 3)) * ((degree - 1) // 2)
    A = np.zeros([len(admissible_words), size])
    current_column = 0
    for i in range(1, (degree + 1) // 2):
        deg_i_words = cl.generate_Words_Hy(i)
        deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 1)
        for v in deg_i_words:
            v_word = cl.Word([1], [v])
            for w in deg_n_minus_i_words:
                result = kawashima_1(v_word, cl.Word([1], [w]))
                result.simplify()
                for k in range(len(result.word)):
                    a = admissible_words.index(result.word[k])
                    A[a, current_column] = result.q[k]
                current_column += 1

    if degree >= 4:
        for i in range(1, (degree) // 2):
            deg_i_words = cl.generate_Words_Hy(i)
            deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 2)
            for v in deg_i_words:
                v_word = cl.Word([1], [v])
                for w in deg_n_minus_i_words:

                    result = kawashima_2(v_word, cl.Word([1], [w]))
                    result.simplify()
                    for k in range(len(result.word)):
                        a = admissible_words.index(result.word[k])
                        A[a, current_column] = result.q[k]
                    current_column += 1

    S = np.linalg.svd(A.astype(int))[1]
    #print(len(sp.Matrix(A.astype(int)).rref()[1]))
    rank = 0
    for i in S:
        if abs(i) > 0.1:
            rank += 1

    return rank
Пример #5
0
def compare_kaw_fancy(degree):
    admissible_words = cl.generate_Words(degree)
    size = 0
    for i in range(2, degree - 1):
        size += (2**(i - 2)) * (2**(degree - i - 2))
    if degree >= 4:
        size += (2**(degree - 3)) * ((degree - 1) // 2) + (2**(degree - 4)) * (
            (degree - 2) // 2)
    else:
        size += (2**(degree - 3)) * ((degree - 1) // 2)

    A = np.zeros([len(admissible_words), size])

    current_column = 0
    for i in range(2, degree - 1):
        deg_i_words = cl.generate_Words(i)
        for v in deg_i_words:
            v_word = cl.Word([1], [v])
            deg_n_minus_i_words = cl.generate_Words(degree - i)
            for w in deg_n_minus_i_words:
                result = v_word.fancy_shuffle(cl.Word([1], [w]))
                for k in range(len(result.word)):
                    a = admissible_words.index(result.word[k])
                    A[a, current_column] = result.q[k]
                current_column += 1

    for i in range(1, (degree + 1) // 2):
        deg_i_words = cl.generate_Words_Hy(i)
        deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 1)
        for v in deg_i_words:
            v_word = cl.Word([1], [v])
            for w in deg_n_minus_i_words:
                result = kawashima_1(v_word, cl.Word([1], [w]))
                result.simplify()
                for k in range(len(result.word)):
                    a = admissible_words.index(result.word[k])
                    A[a, current_column] = result.q[k]
                current_column += 1

    if degree >= 4:
        for i in range(1, (degree) // 2):
            deg_i_words = cl.generate_Words_Hy(i)
            deg_n_minus_i_words = cl.generate_Words_Hy(degree - i - 2)
            for v in deg_i_words:
                v_word = cl.Word([1], [v])
                for w in deg_n_minus_i_words:

                    result = kawashima_2(v_word, cl.Word([1], [w]))
                    result.simplify()
                    for k in range(len(result.word)):
                        a = admissible_words.index(result.word[k])
                        A[a, current_column] = result.q[k]
                    current_column += 1

    S = np.linalg.svd(A.astype(int))[1]
    rank = 0
    for i in S:
        if abs(i) > 0.1:
            rank += 1

    return rank  # len(A.rref()[1])
Пример #6
0
def table_gen():

    #input_list = ["xy","xxy","xyy","xyxy","xxyy","xxxy","xyyy","xxxxy","xyxyy","xyxxy","xyyyy"]
    five_words = cl.generate_Words(5)
    cl.generate_table(five_words)