Files
cvc5/examples/api/java/LinearArith.java
mudathirmahgoub 98e884a740 Update java examples using the new Java API (#7225)
This PRs updates java examples using the new Java API, by converting C++ examples to Java.
Examples CVC4Streams.java and PipedInput.java are removed since they are not longer supported by the API.
All examples are not included in the build which would be added in a future PR.
2021-10-01 23:21:02 +00:00

75 lines
2.5 KiB
Java

/******************************************************************************
* Top contributors (to current version):
* Aina Niemetz, Tim King, Mudathir Mohamed
*
* This file is part of the cvc5 project.
*
* Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
* in the top-level source directory and their institutional affiliations.
* All rights reserved. See the file COPYING in the top-level source
* directory for licensing information.
* ****************************************************************************
*
* A simple demonstration of the linear arithmetic solving capabilities and
* the push pop of cvc5. This also gives an example option.
*/
import cvc5.*;
public class LinearArith
{
public static void main(String args[]) throws CVC5ApiException
{
Solver slv = new Solver();
slv.setLogic("QF_LIRA"); // Set the logic
// Prove that if given x (Integer) and y (Real) then
// the maximum value of y - x is 2/3
// Sorts
Sort real = slv.getRealSort();
Sort integer = slv.getIntegerSort();
// Variables
Term x = slv.mkConst(integer, "x");
Term y = slv.mkConst(real, "y");
// Constants
Term three = slv.mkInteger(3);
Term neg2 = slv.mkInteger(-2);
Term two_thirds = slv.mkReal(2, 3);
// Terms
Term three_y = slv.mkTerm(Kind.MULT, three, y);
Term diff = slv.mkTerm(Kind.MINUS, y, x);
// Formulas
Term x_geq_3y = slv.mkTerm(Kind.GEQ, x, three_y);
Term x_leq_y = slv.mkTerm(Kind.LEQ, x, y);
Term neg2_lt_x = slv.mkTerm(Kind.LT, neg2, x);
Term assertions = slv.mkTerm(Kind.AND, x_geq_3y, x_leq_y, neg2_lt_x);
System.out.println("Given the assertions " + assertions);
slv.assertFormula(assertions);
slv.push();
Term diff_leq_two_thirds = slv.mkTerm(Kind.LEQ, diff, two_thirds);
System.out.println("Prove that " + diff_leq_two_thirds + " with cvc5.");
System.out.println("cvc5 should report ENTAILED.");
System.out.println("Result from cvc5 is: " + slv.checkEntailed(diff_leq_two_thirds));
slv.pop();
System.out.println();
slv.push();
Term diff_is_two_thirds = slv.mkTerm(Kind.EQUAL, diff, two_thirds);
slv.assertFormula(diff_is_two_thirds);
System.out.println("Show that the assertions are consistent with ");
System.out.println(diff_is_two_thirds + " with cvc5.");
System.out.println("cvc5 should report SAT.");
System.out.println("Result from cvc5 is: " + slv.checkSat());
slv.pop();
System.out.println("Thus the maximum value of (y - x) is 2/3.");
}
}