示例#1
0
def deductions_post_paris(clauses, v, c, polarite_unique=True, verbose=False):
    global val
    global pile
    global niv
    poursuivre = True
    # Ajout rendu 3 : on répète les déductions tant qu'elles changent quelque
    # chose
    while poursuivre:
        poursuivre = False
        if polarite_unique:
            # On ne fait de déduction par polarité unique que si ce mode est activé
            for i in deduction.cherche_polarite_unique(clauses, v):
                if val[abs(i)] == 0:
                    poursuivre = True
                    val[abs(i)] = i // abs(i)
                    if verbose:
                        print(verbstr.format(niv, "Déduc",
                              "Litt. {0} par pol. uniq.".format(i)))
                    nouv_valide(clauses, pile, val, i, c, verbose)
                    pile.append(Action("deduc_polarite_unique", abs(i), niv, []))
        for i in range(c):
            if clauses[i].active:
                j, ind = deduction.unitaire(clauses[i], val)
                if j:
                    poursuivre = True
                    pile.append(Action("deduc_unitaire", abs(j), niv,
                                [-x for x in clauses[i] if x != j]))
                    if verbose:
                        print(verbstr.format(niv, "Déduc",
                              "Litt. {0} dans {1} par cl. unit.".format(j, i)))
                    nouv_valide(clauses, pile, val, j, c, verbose)
                    val[abs(j)] = j // abs(j)
                    clauses[i].active = False
示例#2
0
def pre_traite(clauses, c, v, verbose=False):
    global val
    global pile
    for cl in clauses :
        truc = deduction.pre_trait(cl, v)
        if truc == 0:
            raise IndexError
            # Clause vide -> blocage
        elif truc == 1:
            cl.active = False
    for i in deduction.cherche_polarite_unique(clauses, v):
        if verbose:
            print(verbstr.format(niv, "Déduc",
                  "Litt. {0} par pol. uniq.".format(i)))
        val[abs(i)] = i // abs(i)
        nouv_valide(clauses, pile, val, i, c, verbose)
    pile = []