summaryrefslogtreecommitdiff
path: root/examples/api/java/Combination.java
diff options
context:
space:
mode:
authorMorgan Deters <mdeters@gmail.com>2012-11-30 23:07:19 +0000
committerMorgan Deters <mdeters@gmail.com>2012-11-30 23:07:19 +0000
commit45229fd903afa592deb0499027375bc1d5562cbc (patch)
tree67b54b4841b1d084b90226cc5670c4c18173d06c /examples/api/java/Combination.java
parent2bd85df6be705aed37a5d5eba082fbb9a38ab7c5 (diff)
all API examples now have java versions too; bitvectors gets built; also updated old-style copyrights in the examples
Diffstat (limited to 'examples/api/java/Combination.java')
-rw-r--r--examples/api/java/Combination.java95
1 files changed, 95 insertions, 0 deletions
diff --git a/examples/api/java/Combination.java b/examples/api/java/Combination.java
new file mode 100644
index 000000000..3f5826f12
--- /dev/null
+++ b/examples/api/java/Combination.java
@@ -0,0 +1,95 @@
+/********************* */
+/*! \file Combination.cpp
+ ** \verbatim
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009-2012 New York University and The University of Iowa
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.\endverbatim
+ **
+ ** \brief A simple demonstration of the capabilities of CVC4
+ **
+ ** A simple demonstration of how to use uninterpreted functions, combining this
+ ** with arithmetic, and extracting a model at the end of a satisfiable query.
+ **/
+
+import edu.nyu.acsys.CVC4.*;
+
+public class Combination {
+ private static void preFixPrintGetValue(SmtEngine smt, Expr e, int level) {
+ for(int i = 0; i < level; ++i) { System.out.print('-'); }
+ System.out.println("smt.getValue(" + e + ") -> " + smt.getValue(e));
+
+ if(e.hasOperator()) {
+ preFixPrintGetValue(smt, e.getOperator(), level + 1);
+ }
+
+ for(int i = 0; i < e.getNumChildren(); ++i) {
+ Expr curr = e.getChild(i);
+ preFixPrintGetValue(smt, curr, level + 1);
+ }
+ }
+
+ public static void main(String[] args) {
+ System.loadLibrary("cvc4jni");
+
+ ExprManager em = new ExprManager();
+ SmtEngine smt = new SmtEngine(em);
+
+ smt.setOption("tlimit", new SExpr(100));
+ smt.setOption("produce-models", new SExpr(true)); // Produce Models
+ smt.setOption("incremental", new SExpr(true)); // Enable Multiple Queries
+ smt.setOption("output-language", new SExpr("smtlib")); // output-language
+ smt.setOption("default-dag-thresh", new SExpr(0)); //Disable dagifying the output
+
+ // Sorts
+ SortType u = em.mkSort("u");
+ Type integer = em.integerType();
+ Type booleanType = em.booleanType();
+ Type uToInt = em.mkFunctionType(u, integer);
+ Type intPred = em.mkFunctionType(integer, booleanType);
+
+ // Variables
+ Expr x = em.mkVar("x", u);
+ Expr y = em.mkVar("y", u);
+
+ // Functions
+ Expr f = em.mkVar("f", uToInt);
+ Expr p = em.mkVar("p", intPred);
+
+ // Constants
+ Expr zero = em.mkConst(new Rational(0));
+ Expr one = em.mkConst(new Rational(1));
+
+ // Terms
+ Expr f_x = em.mkExpr(Kind.APPLY_UF, f, x);
+ Expr f_y = em.mkExpr(Kind.APPLY_UF, f, y);
+ Expr sum = em.mkExpr(Kind.PLUS, f_x, f_y);
+ Expr p_0 = em.mkExpr(Kind.APPLY_UF, p, zero);
+ Expr p_f_y = em.mkExpr(Kind.APPLY_UF, p, f_y);
+
+ Expr assumptions =
+ em.mkExpr(Kind.AND,
+ em.mkExpr(Kind.LEQ, zero, f_x), // 0 <= f(x)
+ em.mkExpr(Kind.LEQ, zero, f_y), // 0 <= f(y)
+ em.mkExpr(Kind.LEQ, sum, one), // f(x) + f(y) <= 1
+ p_0.notExpr(), // not p(0)
+ p_f_y); // p(f(y))
+ smt.assertFormula(assumptions);
+
+ System.out.println("Given the following assumptions:");
+ System.out.println(assumptions);
+ System.out.println("Prove x /= y is valid. "
+ + "CVC4 says: " + smt.query(em.mkExpr(Kind.DISTINCT, x, y)) + ".");
+
+
+ System.out.println("Now we call checksat on a trivial query to show that");
+ System.out.println("the assumptions are satisfiable: "
+ + smt.checkSat(em.mkConst(true)) + ".");
+
+ System.out.println("Finally, after a SAT call, we use smt.getValue(...) to generate a model.");
+ preFixPrintGetValue(smt, assumptions, 0);
+ }
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback