Java API ======== The Java API of cvc5 mostly mirrors the :doc:`C++ API <../cpp/cpp>` and supports operator overloading, iterators, and exceptions. There are a few differences from the C++ API, such as using arbitrary-precision integer pairs, specifically, pairs of Java `BigInteger` objects, to represent rational numbers. The :doc:`quickstart guide ` gives a short introduction, and more examples can be found `here <../../examples/examples.html>`_. For most applications, the `Solver `_ class is the main entry point to cvc5. The class hierarchy of `cvc5 package `_ provides more details on the individual classes. .. toctree:: :hidden: quickstart ---- Using the cvc5 Java API in a Maven project ------------------------------------------ .. note:: As of version 1.3.1, a stable release has not yet been published to Maven Central. Only snapshot builds are available in the Central Portal Snapshots repository. To use the library in your Maven project, add the following repository and dependency settings: .. code-block:: xml Central Portal Snapshots central-portal-snapshots https://central.sonatype.com/repository/maven-snapshots/ false true io.github.cvc5 cvc5 ${cvc5.version}-SNAPSHOT io.github.cvc5 cvc5 ${cvc5.version}-SNAPSHOT ${os.classifier} Here, ``${cvc5.version}`` refers to the version following the latest stable release (e.g., use ``1.3.2`` if the latest stable version is ``1.3.1``). The ``${os.classifier}`` variable specifies the operating system and CPU architecture (e.g., ``linux-x86_64`` or ``osx-aarch_64``). You can automatically retrieve the correct classifier using the `os-maven-plugin `_: .. code-block:: xml kr.motd.maven os-maven-plugin 1.7.0 After adding the plugin, use ``${os.detected.classifier}`` as the classifier value. Using self-contained cvc5 Java API JAR ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Starting from version 1.2.1, a JAR file containing the cvc5 Java API and all required native libraries is available on the release page for each version. To use it, download the appropriate JAR file for your platform. For example, if your computer runs Linux x86_64, download `cvc5-Linux-x86_64-java-api.jar` to a working directory. To compile the `QuickStart.java` example provided in the :doc:`quickstart guide `, ensure the file is in the same directory as the JAR. Then, run: .. code-block:: bash $ javac -cp "cvc5-Linux-x86_64-java-api.jar" ./QuickStart.java -d . After compilation, execute the example with: .. code-block:: bash $ java -cp "cvc5-Linux-x86_64-java-api.jar:." QuickStart # Replace : with ; on Windows expected: sat result: sat value for x: 1/6 value for y: 1/6 value for x - y: 0/1 computed correctly expected: unsat result: unsat unsat core size: 3 unsat core: (< 0 a) (< 0 b) (< (+ a b) 1) Building cvc5 Java API ^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash $ git clone https://github.com/cvc5/cvc5 $ cd cvc5 $ ./configure.sh production --java-bindings --auto-download --prefix=build/install $ cd build $ make $ make install $ ls install/lib cmake libcvc5parser.so.1 libpoly.so libpolyxx.so libcvc5jni.so libcvc5.so libpoly.so.0 libpolyxx.so.0 libcvc5parser.so libcvc5.so.1 libpoly.so.0.2.0 libpolyxx.so.0.2.0 $ ls install/share/java/ cvc5-1.3.2-SNAPSHOT.jar cvc5.jar # compile example QuickStart.java with cvc5 jar file $ javac -cp "install/share/java/cvc5.jar" ../examples/api/java/QuickStart.java -d . # run example QuickStart with cvc5 jar file and cvc5 shared libraries $ java -cp "install/share/java/cvc5.jar:." "-Djava.library.path=install/lib" QuickStart expected: sat result: sat value for x: 1/6 value for y: 1/6 value for x - y: 0/1 computed correctly expected: unsat result: unsat unsat core size: 3 unsat core: (< 0 a) (< 0 b) (< (+ a b) 1) ---- `Javadoc API Documentation `_ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Package io.github.cvc5 `_ ............................................................... * class `AbstractPlugin `_ * class `Command `_ * class `Datatype `_ * class `DatatypeConstructor `_ * class `DatatypeConstructorDecl `_ * class `DatatypeDecl `_ * class `DatatypeSelector `_ * class `Grammar `_ * class `InputParser `_ * class `Op `_ * class `OptionInfo `_ * class `Pair `_ * class `Proof `_ * class `Result `_ * class `Solver `_ * class `Sort `_ * class `Stat `_ * class `Statistics `_ * class `SymbolManager `_ * class `SynthResult `_ * class `Term `_ * class `TermManager `_ * class `Triplet `_ * class `Utils `_ * enum `Kind `_ * enum `Result.UnknownExplanation `_ * enum `RoundingMode `_ * enum `ProofRule `_ * exception `CVC5ApiException `_ * exception `CVC5ApiOptionException `_ * exception `CVC5ApiRecoverableException `_ `Package io.github.cvc5.modes `_ ........................................................................... * enum `BlockModelsMode `_ * enum `FindSynthTarget `_ * enum `InputLanguage `_ * enum `LearnedLitType `_ * enum `OptionCategory `_ * enum `ProofComponent `_ * enum `ProofFormat `_