Search in sources :

Example 1 with Expr

use of edu.stanford.CVC4.Expr in project VERDICT by ge-high-assurance.

the class VerdictSynthesis method performSynthesisMaxSmt.

/**
 * Perform synthesis using Z3 MaxSMT.
 *
 * @param tree
 * @param targetDal
 * @param factory
 * @return
 * @deprecated use the multi-requirement approach instead
 */
@Deprecated
public static Optional<Pair<Set<ComponentDefense>, Double>> performSynthesisMaxSmt(DTree tree, int targetDal, DLeaf.Factory factory) {
    Context context = new Context();
    Optimize optimizer = context.mkOptimize();
    Collection<ComponentDefense> pairs = factory.allComponentDefensePairs();
    int costLcd = normalizeCosts(pairs);
    for (ComponentDefense pair : pairs) {
        if (pair.dalToNormCost(targetDal) > 0) {
            // this id ("cover") doesn't matter but we have to specify something
            optimizer.AssertSoft(context.mkNot(pair.toZ3(context)), pair.dalToNormCost(targetDal), "cover");
        }
    }
    optimizer.Assert(tree.toZ3(context));
    if (optimizer.Check().equals(Status.SATISFIABLE)) {
        Set<ComponentDefense> output = new LinkedHashSet<>();
        int totalNormalizedCost = 0;
        Model model = optimizer.getModel();
        for (ComponentDefense pair : pairs) {
            Expr expr = model.eval(pair.toZ3(context), true);
            switch(expr.getBoolValue()) {
                case Z3_L_TRUE:
                    output.add(pair);
                    totalNormalizedCost += pair.dalToNormCost(targetDal);
                    break;
                case Z3_L_FALSE:
                    break;
                case Z3_L_UNDEF:
                default:
                    throw new RuntimeException("Synthesis: Undefined variable in output model: " + pair.toString());
            }
        }
        return Optional.of(new Pair<>(output, ((double) totalNormalizedCost) / costLcd));
    } else {
        System.err.println("Synthesis: SMT not satisfiable, perhaps there are unmitigatable attacks");
        return Optional.empty();
    }
}
Also used : Context(com.microsoft.z3.Context) LinkedHashSet(java.util.LinkedHashSet) BoolExpr(com.microsoft.z3.BoolExpr) ArithExpr(com.microsoft.z3.ArithExpr) Expr(com.microsoft.z3.Expr) ComponentDefense(com.ge.verdict.synthesis.dtree.DLeaf.ComponentDefense) Model(com.microsoft.z3.Model) Optimize(com.microsoft.z3.Optimize)

Example 2 with Expr

use of edu.stanford.CVC4.Expr in project cel-java by projectnessie.

the class Unparser method visitList.

void visitList(CreateList expr) {
    List<Expr> elems = expr.getElementsList();
    str.append("[");
    for (int i = 0; i < elems.size(); i++) {
        if (i > 0) {
            str.append(", ");
        }
        Expr elem = elems.get(i);
        visit(elem);
    }
    str.append("]");
}
Also used : Expr(com.google.api.expr.v1alpha1.Expr)

Example 3 with Expr

use of edu.stanford.CVC4.Expr in project cel-java by projectnessie.

the class Unparser method visitStructMap.

void visitStructMap(CreateStruct expr) {
    List<Entry> entries = expr.getEntriesList();
    str.append("{");
    for (int i = 0; i < entries.size(); i++) {
        if (i > 0) {
            str.append(", ");
        }
        Entry entry = entries.get(i);
        Expr k = entry.getMapKey();
        visit(k);
        str.append(": ");
        Expr v = entry.getValue();
        visit(v);
    }
    str.append("}");
}
Also used : Entry(com.google.api.expr.v1alpha1.Expr.CreateStruct.Entry) Expr(com.google.api.expr.v1alpha1.Expr)

Example 4 with Expr

use of edu.stanford.CVC4.Expr in project cel-java by projectnessie.

the class Unparser method visitCallBinary.

void visitCallBinary(Call expr) {
    String fun = expr.getFunction();
    List<Expr> args = expr.getArgsList();
    Expr lhs = args.get(0);
    // add parens if the current operator is lower precedence than the lhs expr operator.
    boolean lhsParen = isComplexOperatorWithRespectTo(fun, lhs);
    Expr rhs = args.get(1);
    // add parens if the current operator is lower precedence than the rhs expr operator,
    // or the same precedence and the operator is left recursive.
    boolean rhsParen = isComplexOperatorWithRespectTo(fun, rhs);
    if (!rhsParen && isLeftRecursive(fun)) {
        rhsParen = isSamePrecedence(Operator.precedence(fun), rhs);
    }
    visitMaybeNested(lhs, lhsParen);
    String unmangled = Operator.findReverseBinaryOperator(fun);
    if (unmangled == null) {
        throw new IllegalStateException(String.format("cannot unmangle operator: %s", fun));
    }
    str.append(" ");
    str.append(unmangled);
    str.append(" ");
    visitMaybeNested(rhs, rhsParen);
}
Also used : Expr(com.google.api.expr.v1alpha1.Expr)

Example 5 with Expr

use of edu.stanford.CVC4.Expr in project cel-java by projectnessie.

the class CELTest method CustomMacro.

@Test
void CustomMacro() {
    Macro joinMacro = newReceiverMacro("join", 1, (eh, target, args) -> {
        Expr delim = args.get(0);
        Expr iterIdent = eh.ident("__iter__");
        Expr accuIdent = eh.ident("__result__");
        Expr init = eh.literalString("");
        Expr condition = eh.literalBool(true);
        Expr step = eh.globalCall(Operator.Conditional.id, eh.globalCall(Operator.Greater.id, eh.receiverCall("size", accuIdent, emptyList()), eh.literalInt(0)), eh.globalCall(Operator.Add.id, eh.globalCall(Operator.Add.id, accuIdent, delim), iterIdent), iterIdent);
        return eh.fold("__iter__", target, "__result__", init, condition, step, accuIdent);
    });
    Env e = newEnv(macros(joinMacro));
    AstIssuesTuple astIss = e.compile("['hello', 'cel', 'friend'].join(',')");
    assertThat(astIss.hasIssues()).isFalse();
    Program prg = e.program(astIss.getAst(), evalOptions(OptExhaustiveEval));
    EvalResult out = prg.eval(noVars());
    assertThat(out.getVal().equal(stringOf("hello,cel,friend"))).isSameAs(True);
}
Also used : ParsedExpr(com.google.api.expr.v1alpha1.ParsedExpr) Expr(com.google.api.expr.v1alpha1.Expr) CEL.astToCheckedExpr(org.projectnessie.cel.CEL.astToCheckedExpr) CheckedExpr(com.google.api.expr.v1alpha1.CheckedExpr) CEL.astToParsedExpr(org.projectnessie.cel.CEL.astToParsedExpr) EvalResult(org.projectnessie.cel.Program.EvalResult) Macro(org.projectnessie.cel.parser.Macro) Macro.newReceiverMacro(org.projectnessie.cel.parser.Macro.newReceiverMacro) Env.newEnv(org.projectnessie.cel.Env.newEnv) Env.newCustomEnv(org.projectnessie.cel.Env.newCustomEnv) AstIssuesTuple(org.projectnessie.cel.Env.AstIssuesTuple) Test(org.junit.jupiter.api.Test)

Aggregations

Expr (edu.stanford.CVC4.Expr)57 Test (org.junit.Test)55 CVC4.vectorExpr (edu.stanford.CVC4.vectorExpr)53 SExpr (edu.stanford.CVC4.SExpr)42 Expr (com.microsoft.z3.Expr)32 Result (edu.stanford.CVC4.Result)32 Rational (edu.stanford.CVC4.Rational)30 Expr (com.google.api.expr.v1alpha1.Expr)23 BoolExpr (com.microsoft.z3.BoolExpr)22 ArrayType (edu.stanford.CVC4.ArrayType)13 BitVectorType (edu.stanford.CVC4.BitVectorType)13 Type (edu.stanford.CVC4.Type)13 Status (com.microsoft.z3.Status)11 HashMap (java.util.HashMap)11 CheckedExpr (com.google.api.expr.v1alpha1.CheckedExpr)8 ArithExpr (com.microsoft.z3.ArithExpr)8 BitVecExpr (com.microsoft.z3.BitVecExpr)8 FormulaType (org.sosy_lab.java_smt.api.FormulaType)7 ParsedExpr (com.google.api.expr.v1alpha1.ParsedExpr)6 BitVector (edu.stanford.CVC4.BitVector)6