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)