Beispiel #1
0
def atom_to_z3(atom):
    if ivy_logic.is_equals(atom.rep) and ivy_logic.is_enumerated(atom.args[0]) and not use_z3_enums:
        return encode_equality(*atom.args)
    if atom.relname not in z3_predicates:
        rel = lookup_native(atom.relname,relations,"relation")
#        print "atom: {}, rep: {}, rep.sort: {}".format(atom,atom.rep,atom.rep.sort)
        if not rel:
            sig = atom.rep.sort.to_z3()
            rel = z3.Function(solver_name(atom.rep), *sig)
        z3_predicates[atom.relname] = rel
#    return z3_predicates[atom.relname](
#        *[term_to_z3(t) for t in atom.args])
    pred = z3_predicates[atom.relname]
    tup = [term_to_z3(t) for t in atom.args]
    return apply_z3_func(pred,tup)
Beispiel #2
0
def atom_to_z3(atom):
    if ivy_logic.is_equals(atom.rep) and ivy_logic.is_enumerated(atom.args[0]):
        return encode_equality(*atom.args)
    if atom.relname not in z3_predicates:
        rel = lookup_native(atom.relname, relations, "relation")
        #        print "atom: {}, rep: {}, rep.sort: {}".format(atom,atom.rep,atom.rep.sort)
        if not rel:
            sig = atom.rep.sort.to_z3()
            rel = z3.Function(atom.rep.name, *sig)
        z3_predicates[atom.relname] = rel


#    return z3_predicates[atom.relname](
#        *[term_to_z3(t) for t in atom.args])
    pred = z3_predicates[atom.relname]
    tup = [term_to_z3(t) for t in atom.args]
    return apply_z3_func(pred, tup)
Beispiel #3
0
def atom_to_z3(atom):
    if ivy_logic.is_equals(atom.rep) and ivy_logic.is_enumerated(atom.args[0]) and not use_z3_enums:
        return encode_equality(*atom.args)
    if atom.relname not in z3_predicates:
        rel = lookup_native(atom.relname,relations,"relation")
#        print "atom: {}, rep: {}, rep.sort: {}".format(atom,atom.rep,atom.rep.sort)
        if not rel:
            if atom.rep.name in polymacs and iu.ivy_use_polymorphic_macros:
                rel = get_polymacs(atom.rep)
            else:
                sig = atom.rep.sort.to_z3()
                rel = z3.Function(solver_name(atom.rep), *sig) if isinstance(sig,list) else z3.Const(solver_name(atom.rep),sig)
        z3_predicates[atom.relname] = rel
#    return z3_predicates[atom.relname](
#        *[term_to_z3(t) for t in atom.args])
    pred = z3_predicates[atom.relname]
    tup = [term_to_z3(t) for t in atom.args]
    return apply_z3_func(pred,tup)
Beispiel #4
0
def atom_to_z3(atom):
    if ivy_logic.is_equals(atom.rep) and ivy_logic.is_enumerated(atom.args[0]) and not use_z3_enums:
        return encode_equality(*atom.args)
    if atom.relname not in z3_predicates:
        rel = lookup_native(atom.relname, relations, "relation")
        #        print "atom: {}, rep: {}, rep.sort: {}".format(atom,atom.rep,atom.rep.sort)
        if not rel:
            if atom.rep.name in polymacs and iu.ivy_use_polymorphic_macros:
                rel = get_polymacs(atom.rep)
            else:
                sig = atom.rep.sort.to_z3()
                rel = (
                    z3.Function(solver_name(atom.rep), *sig)
                    if isinstance(sig, list)
                    else z3.Const(solver_name(atom.rep), sig)
                )
        z3_predicates[atom.relname] = rel
    #    return z3_predicates[atom.relname](
    #        *[term_to_z3(t) for t in atom.args])
    pred = z3_predicates[atom.relname]
    tup = [term_to_z3(t) for t in atom.args]
    return apply_z3_func(pred, tup)