mirror of
https://github.com/AdaCore/cvc5.git
synced 2026-02-12 12:32:16 -08:00
This PR enables CI for java tests by adding --java-bindings to ci.yml. It also replaces the unreliable finalize method and instead uses AutoCloseable and explicit close method to clean up dynamic memory allocated by java native interface. The PR fixes compile errors for SolverTest.java and runtime errors for Solver.defineFun.
77 lines
2.6 KiB
Java
77 lines
2.6 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 io.github.cvc5.api.*;
|
|
public class LinearArith
|
|
{
|
|
public static void main(String args[]) throws CVC5ApiException
|
|
{
|
|
try (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.");
|
|
}
|
|
}
|
|
} |