Ejemplo n.º 1
0
def order(b_base):
    b = b_base[0]
    truth = []
    sumtrue = []
    elements = []
    n = b_base[0]
    for i in range(len(b_base)):
        b = And(b, b_base[i])
    b = list(b.atoms())
    table = list(itertools.product([False, True], repeat=len(b)))
    for i in range(len(b_base)):
        truth.append([])

        for j in range(len(table)):
            if i == 0:
                elements.append([])
            for k in range(len(table[j])):
                if k == 0:
                    n = b_base[i].subs(b[k], table[j][k])
                else:
                    n = n.subs(b[k], table[j][k])
                if i == 0:
                    if table[j][k] == False:
                        elements[j].append(Not(b[k]))
                    else:
                        elements[j].append(b[k])

            truth[i].append(n)

        if i == len(b_base) - 1:
            for i, k in enumerate(truth):
                for j, item in enumerate(k):
                    if truth[i][j] == True:
                        truth[i][j] = 1
                    else:
                        truth[i][j] = 0

            for z in zip(*truth):
                sumtrue.append(sum(z))

    m = b + table
    Z = sort_together([sumtrue, elements])[1]
    Z = Z[::-1]
    return Z, sorted(sumtrue, reverse=True)