Exemplo n.º 1
0
def logical_consequence(formula, premises):
    Utils.verified_propositions(formula)
    if not isinstance(premises, list):
        raise FormulaArgumentError
    for index, premise in enumerate(premises):
        set_formula = AND(set_formula, premise) if index else premises[0]
    return not satisfiability_checking(AND(set_formula, NOT(formula)))
Exemplo n.º 2
0
def truth_table_generator(formula, atoms=None):
    Utils.verified_propositions(formula)
    atoms = get_atoms(formula) if atoms == None else atoms
    truth_table = collections.OrderedDict()

    num_rows = 2**len(atoms)
    count_for_change = [2**(i - 1) for i in range(len(atoms), 0, -1)]

    for index, atom in enumerate(atoms):
        truth_table[repr(atom)] = (_generate_values_of_atom_(
            num_rows, count_for_change[index]))

    for formula in get_formulas(formula, atoms):
        truth_table[repr(formula)] = (_generate_values_of_formula_(
            formula, num_rows, atoms, truth_table))

    return truth_table
Exemplo n.º 3
0
def get_formulas(formula, atoms):
    Utils.verified_propositions(formula)
    return list(filter(lambda f: f not in atoms, formula.sub_formula))
Exemplo n.º 4
0
def get_atoms(formula):
    Utils.verified_propositions(formula)
    return sorted(filter(lambda f: isinstance(f, Atom), formula.sub_formula),
                  key=repr)
Exemplo n.º 5
0
def satisfiability_checking(formula):
    Utils.verified_propositions(formula)
    truth_table = truth_table_generator(formula)
    return True in truth_table[repr(formula)]
Exemplo n.º 6
0
def get_atoms(formula):
    Utils.verified_propositions(formula)
    return list(filter(lambda f: isinstance(f, Atom), formula.sub_formula))