Ejemplo n.º 1
0
def is_model(polish_formula, model, generator=None):
    if generator is None:
        generator = Generator()
    formula = generator.to_expression(polish_formula)
    solver = aiger_sat.SolverWrapper()
    solver.add_expr(~formula)
    return not solver.is_sat(assumptions=model)
Ejemplo n.º 2
0
def generate_model(formula_pre, generator=None):
    if generator is None:
        generator = Generator()
    expr = generator.to_expression(formula_pre)
    solver = aiger_sat.SolverWrapper()
    try:
        solver.add_expr(expr)
    except ValueError as e:
        print('ValueError', str(e))
        return None
    model = solver.get_model()
    model_str = None
    if model:
        model_word_pairs = [
            '%s %s' % x for x in sorted(model.items(), key=lambda x: x[0])
        ]
        model_str = ' '.join(model_word_pairs)

    minimized = minimize_model(expr, model)
    minimized_str = None
    if minimized:
        minimized_word_pairs = [
            '%s %s' % x for x in sorted(minimized.items(), key=lambda x: x[0])
        ]
        minimized_str = ' '.join(minimized_word_pairs)
    return minimized_str
Ejemplo n.º 3
0
def minimize_model(formula, model):
    if model is None:
        return None
    solver = aiger_sat.SolverWrapper()
    solver.add_expr(~formula)
    if solver.is_sat(assumptions=model):
        raise ValueError('UNSAT core generation failed.')
    minimized = solver.get_unsat_core()
    if minimized is None:
        minimized = {}
    return minimized
Ejemplo n.º 4
0
def is_model(polish_formula: Text, model: Dict[Text, int]):
    formula = generator.to_expression(polish_formula.split())
    solver = aiger_sat.SolverWrapper()
    solver.add_expr(~formula)
    return not solver.is_sat(assumptions=model)
Ejemplo n.º 5
0
def get_model(formula):
    solver = aiger_sat.SolverWrapper()
    solver.add_expr(formula)
    return solver.get_model()