Add a few miscellaneous pieces of documentation (#8533)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Sat, 2 Apr 2022 01:02:47 +0000 (20:02 -0500)
committerGitHub <noreply@github.com>
Sat, 2 Apr 2022 01:02:47 +0000 (01:02 +0000)
16 files changed:
docs/api/python/pythonic/pythonic.rst
docs/theories/datatypes.rst
src/api/cpp/cvc5.h
src/api/java/io/github/cvc5/Datatype.java
src/api/java/io/github/cvc5/DatatypeConstructor.java
src/api/java/io/github/cvc5/DatatypeConstructorDecl.java
src/api/java/io/github/cvc5/DatatypeDecl.java
src/api/java/io/github/cvc5/DatatypeSelector.java
src/api/java/io/github/cvc5/Grammar.java
src/api/java/io/github/cvc5/Op.java
src/api/java/io/github/cvc5/Result.java
src/api/java/io/github/cvc5/Solver.java
src/api/java/io/github/cvc5/Sort.java
src/api/java/io/github/cvc5/SynthResult.java
src/api/java/io/github/cvc5/Term.java
src/api/python/cvc5.pxi

index d5a31a939e0d13fbde8f6790a30871ca838f22e4..db84892a778c17c0bc790bd11b9af2f44fe7c99e 100644 (file)
@@ -12,7 +12,7 @@ This API is missing some features from cvc5 and Z3Py.
 
 It does not (currently) support these cvc5 features:
 
-* The theories of strings and sequences
+* The theories of strings, sequences and bags
 * unsatisfiable cores
 * syntax-guided synthesis (SyGuS)
 
index 2ba8906e25ff631e5db83b28d35d5045d6cd8f0f..d78c13e0a3202257c10777d8589a8b1804808aad 100644 (file)
@@ -39,9 +39,11 @@ The numbers ``n1 ... nk`` denote the number of type
 parameters for the datatype, where ``0`` is used for non-parametric datatypes.
 
 In addition to declaring symbols for constructors and selectors, the above
-command also adds tester (or "discriminator") indexed symbols of the form
+command also allows for tester (or "discriminator") indexed symbols of the form
 ``(_ is C)`` for each constructor ``C``, which are unary predicates which
-evaluate to true iff their argument has top-symbol ``C``.
+evaluate to true iff their argument has top-symbol ``C``. It also allows for
+updater indexed symbols of the form ``(_ update Sij)`` for each selector ``Sij``,
+whose semantics are described below.
 
 Semantics
 ---------
@@ -109,6 +111,27 @@ Examples
    (assert (and (= (fname x) "John") (= (lname x) "Smith")))
    (check-sat)
 
+Datatype Updaters
+--------------------
+
+Datatype updaters are a (non-standard) extension available in datatype logics.
+The term:
+
+.. code:: smtlib
+   ((_ update Sij) t u)
+
+is equivalent to replacing the field of ``t`` denoted by the selector ``Sij``
+with the value ``u``, or ``t`` itself if that selector does not apply to the
+constructor symbol of ``t``.  For example, for the list datatype, we have that:
+
+.. code:: smtlib
+   ((_ update head) (cons 4 nil) 7) = (cons 7 nil)
+   ((_ update tail) (cons 4 nil) (cons 5 nil)) = (cons 4 (cons 5 nil))
+   ((_ update head) nil 5) = nil
+
+Note that datatype updaters can be seen as syntax sugar for an if-then-else
+term that checks whether the constructor of ``t`` is the same as the one
+associated with the given selector.
 
 Parametric Datatypes
 --------------------
index 6b372b4ce291e0fba34491dc021faaf61b5dc05f..3470884e1cdc500880b8dc5de3a7c7f96d4333dc 100644 (file)
@@ -1789,7 +1789,8 @@ class DatatypeConstructorIterator;
 class DatatypeIterator;
 
 /**
- * A cvc5 datatype constructor declaration.
+ * A cvc5 datatype constructor declaration. A datatype constructor declaration
+ * is a specification used for creating a datatype constructor.
  */
 class CVC5_EXPORT DatatypeConstructorDecl
 {
@@ -1877,7 +1878,16 @@ class CVC5_EXPORT DatatypeConstructorDecl
 class Solver;
 
 /**
- * A cvc5 datatype declaration.
+ * A cvc5 datatype declaration. A datatype declaration is not itself a datatype
+ * (see Datatype), but a specification for creating a datatype sort.
+ *
+ * The interface for a datatype declaration coincides with the syntax for the
+ * SMT-LIB 2.6 command `declare-datatype`, or a single datatype within the
+ * `declare-datatypes` command.
+ *
+ * Datatype sorts can be constructed from DatatypeDecl using the methods:
+ *   - Solver::mkDatatypeSort()
+ *   - Solver::mkDatatypeSorts()
  */
 class CVC5_EXPORT DatatypeDecl
 {
@@ -2629,7 +2639,9 @@ std::ostream& operator<<(std::ostream& out,
 /* -------------------------------------------------------------------------- */
 
 /**
- * A Sygus Grammar.
+ * A Sygus Grammar. This class can be used to define a context-free grammar
+ * of terms. Its interface coincides with the definition of grammars
+ * (``GrammarDef``) in the SyGuS IF 2.1 standard.
  */
 class CVC5_EXPORT Grammar
 {
index 06ceaa67fb4aa8d2d62e9146883dd0c7a6fad827..30d5b888809b74289dfc2063cc2c41a928c75fc7 100644 (file)
@@ -18,6 +18,9 @@ package io.github.cvc5;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
 
+/**
+ * A cvc5 datatype.
+ */
 public class Datatype extends AbstractPointer implements Iterable<DatatypeConstructor>
 {
   // region construction and destruction
index c8bff090051dd612128c78309e716c71def78907..80832894673dc39c26fed5bb090ad2872388faf8 100644 (file)
@@ -18,6 +18,9 @@ package io.github.cvc5;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
 
+/**
+ * A cvc5 datatype constructor.
+ */
 public class DatatypeConstructor extends AbstractPointer implements Iterable<DatatypeSelector>
 {
   // region construction and destruction
index b4e7557818b0c2842f74127fac98d35fe215466f..6bee8133c37bd26e679c615d89c27203c3a5be64 100644 (file)
 
 package io.github.cvc5;
 
+/**
+ * A cvc5 datatype constructor declaration. A datatype constructor declaration
+ * is a specification used for creating a datatype constructor.
+ */
 public class DatatypeConstructorDecl extends AbstractPointer
 {
   // region construction and destruction
index 3c15a049d9d41e7662e7567825afb826a5f639a5..aacbed8ab044f6681db0469c6c983ea60eabf3b8 100644 (file)
 
 package io.github.cvc5;
 
+/**
+ * A cvc5 datatype declaration. A datatype declaration is not itself a datatype
+ * (see {@link Datatype}), but a specification for creating a datatype sort.
+ *
+ * The interface for a datatype declaration coincides with the syntax for the
+ * SMT-LIB 2.6 command `declare-datatype`, or a single datatype within the
+ * `declare-datatypes` command.
+ *
+ * Datatype sorts can be constructed from DatatypeDecl using the methods:
+ *   - {@link Solver#mkDatatypeSort(DatatypeDecl)}
+ *   - {@link Solver#mkDatatypeSorts(DatatypeDecl[])}
+ */
 public class DatatypeDecl extends AbstractPointer
 {
   // region construction and destruction
index 4f64c045c4bf0b26cfad176c72dd6ad615663a69..4978143c9d72a585c45b51bd3bb0106672d79a3e 100644 (file)
@@ -15,6 +15,9 @@
 
 package io.github.cvc5;
 
+/**
+ * A cvc5 datatype selector.
+ */
 public class DatatypeSelector extends AbstractPointer
 {
   // region construction and destruction
index 36c6ad789965a48f368d1e872669b870d3c5c906..389fc9177dbc238b2a35bd125a02a4b365e5eda7 100644 (file)
 
 package io.github.cvc5;
 
+/**
+ * A Sygus Grammar. This class can be used to define a context-free grammar
+ * of terms. Its interface coincides with the definition of grammars
+ * (``GrammarDef``) in the SyGuS IF 2.1 standard.
+ */
 public class Grammar extends AbstractPointer
 {
   // region construction and destruction
index 68a24fb429e4e9896aa145b579b5c4a12642f045..30dd502297ebb797b1b4c937b9874b4fd31ffaaa 100644 (file)
 
 package io.github.cvc5;
 
+/**
+ * A cvc5 operator.
+ * An operator is a term that represents certain operators, instantiated
+ * with its required parameters, e.g., a term of kind {@link Kind#BITVECTOR_EXTRACT}.
+ */
 public class Op extends AbstractPointer
 {
   // region construction and destruction
index 7607e62762ef43a9703d629382348317154c4e15..e66f07d460182a3669412895bc447566438269f0 100644 (file)
@@ -18,6 +18,9 @@ package io.github.cvc5;
 import java.util.HashMap;
 import java.util.Map;
 
+/**
+ * Encapsulation of a three-valued solver result, with explanations.
+ */
 public class Result extends AbstractPointer
 {
   // region construction and destruction
index 908e90dc5584f841eef89c48108569ae8496c80b..ccff49870da82c82dade4cb5e5b9e5488f8a9acf 100644 (file)
@@ -19,6 +19,9 @@ import io.github.cvc5.modes.BlockModelsMode;
 import java.io.IOException;
 import java.util.*;
 
+/**
+ * A cvc5 solver.
+ */
 public class Solver implements IPointer, AutoCloseable
 {
   private long pointer;
index a5d4a539ac9045c25b2f322cf250cb3f24543cec..8c00a41e66c98529467125a4eec3546138cbb977 100644 (file)
@@ -17,6 +17,9 @@ package io.github.cvc5;
 
 import java.util.List;
 
+/**
+ * The sort of a cvc5 term.
+ */
 public class Sort extends AbstractPointer implements Comparable<Sort>
 {
   // region construction and destruction
index b94951d93ba0274c5ca1d87e29743472d6e420ec..d7e611e67e253a105a3b5236aba8874486c1431a 100644 (file)
 
 package io.github.cvc5;
 
+/**
+ * Encapsulation of a solver synth result.
+ *
+ * This is the return value of the API methods:
+ *   - {@link Solver#checkSynth()}
+ *   - {@link Solver#checkSynthNext()}
+ *
+ * which we call synthesis queries.  This class indicates whether the
+ * synthesis query has a solution, has no solution, or is unknown.
+ */
 public class SynthResult extends AbstractPointer
 {
   // region construction and destruction
index a60b11427cb61159a35b5ff82694fc7a18f2b264..9ab394cd31bc15f1117e46c4b220150c7d06795a 100644 (file)
@@ -23,6 +23,9 @@ import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.Set;
 
+/**
+ * A cvc5 Term.
+ */
 public class Term extends AbstractPointer implements Comparable<Term>, Iterable<Term>
 {
   // region construction and destruction
index 65d6991938a8184d3a64b5da445da944285e66b8..f39b9cf0426dcbc223a38d3373ece7938c5be72f 100644 (file)
@@ -365,7 +365,8 @@ cdef class DatatypeConstructor:
 
 cdef class DatatypeConstructorDecl:
     """
-        A cvc5 datatype constructor declaration.
+        A cvc5 datatype constructor declaration. A datatype constructor
+        declaration is a specification used for creating a datatype constructor.
 
         Wrapper class for :cpp:class:`cvc5::DatatypeConstructorDecl`.
     """
@@ -421,7 +422,19 @@ cdef class DatatypeConstructorDecl:
 
 cdef class DatatypeDecl:
     """
-        A cvc5 datatype declaration.
+        A cvc5 datatype declaration. A datatype declaration is not itself a
+        datatype (see :py:class:`cvc5.Datatype`), but a specification for creating a datatype
+        sort.
+
+        The interface for a datatype declaration coincides with the syntax for
+        the SMT-LIB 2.6 command `declare-datatype`, or a single datatype within
+        the `declare-datatypes` command.
+
+        Datatype sorts can be constructed from :py:class:`DatatypeDecl` using
+        the methods:
+        
+            - :py:meth:`Solver.mkDatatypeSort()`
+            - :py:meth:`Solver.mkDatatypeSorts()`
 
         Wrapper class for :cpp:class:`cvc5::DatatypeDecl`.
     """
@@ -594,7 +607,9 @@ cdef class Op:
 
 cdef class Grammar:
     """
-        A Sygus Grammar.
+        A Sygus Grammar. This class can be used to define a context-free grammar
+        of terms. Its interface coincides with the definition of grammars
+        (``GrammarDef``) in the SyGuS IF 2.1 standard.
 
         Wrapper class for :cpp:class:`cvc5::Grammar`.
     """