예제 #1
0
def __clean_cnf(cnf, is_first_order):
    cnf = Braces.flatten(cnf, is_first_order)

    clauses = set()
    for disjunct_text in cnf.split(LogicOperator.Conjuction):
        disjunct_text = disjunct_text.replace(Braces.Left, "")\
                                     .replace(Braces.Right, "")
        if len(disjunct_text) == 0:
            continue

        disjunct_text = disjunct_text.replace(Braces.FO_Left, Braces.Left)\
                                     .replace(Braces.FO_Right, Braces.Right)
        disjunct = frozenset(symbol.strip() for symbol in
                             disjunct_text.split(LogicOperator.Disjunction))

        if not is_disjunction_tautology(disjunct):
            clauses.add(disjunct)

    return __clean_clauses(clauses)
예제 #2
0
def __clean_cnf(cnf, is_first_order):
    cnf = Braces.flatten(cnf, is_first_order)

    clauses = set()
    for disjunct_text in cnf.split(LogicOperator.Conjuction):
        disjunct_text = disjunct_text.replace(Braces.Left, "")\
                                     .replace(Braces.Right, "")
        if len(disjunct_text) == 0:
            continue

        disjunct_text = disjunct_text.replace(Braces.FO_Left, Braces.Left)\
                                     .replace(Braces.FO_Right, Braces.Right)
        disjunct = frozenset(
            symbol.strip()
            for symbol in disjunct_text.split(LogicOperator.Disjunction))

        if not is_disjunction_tautology(disjunct):
            clauses.add(disjunct)

    return __clean_clauses(clauses)