Fixes for API kind documentation (#8397)
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>
Sat, 26 Mar 2022 01:07:05 +0000 (20:07 -0500)
committerGitHub <noreply@github.com>
Sat, 26 Mar 2022 01:07:05 +0000 (01:07 +0000)
Also renames str.tolower -> str.to_lower, str.toupper -> str.to_upper.

Co-authored-by: Aina Niemetz <aina.niemetz@gmail.com>
22 files changed:
proofs/lfsc/signatures/strings_programs.plf
proofs/lfsc/signatures/theory_def.plf
src/api/cpp/cvc5.cpp
src/api/cpp/cvc5.h
src/api/cpp/cvc5_kind.h
src/parser/smt2/smt2.cpp
src/printer/smt2/smt2_printer.cpp
src/theory/strings/extf_solver.cpp
src/theory/strings/kinds
src/theory/strings/sequences_rewriter.cpp
src/theory/strings/strings_rewriter.cpp
src/theory/strings/strings_rewriter.h
src/theory/strings/term_registry.cpp
src/theory/strings/theory_strings.cpp
src/theory/strings/theory_strings_preprocess.cpp
src/theory/strings/theory_strings_utils.cpp
test/regress/cli/regress0/strings/parser-syms.cvc.smt2
test/regress/cli/regress0/strings/tolower-rrs.smt2
test/regress/cli/regress0/strings/tolower-simple.smt2
test/regress/cli/regress1/strings/rev-conv1.smt2
test/regress/cli/regress1/strings/tolower-find.smt2
test/unit/api/cpp/solver_black.cpp

index 3843430525bba2369470e27949d925e30c070dcc..eb7351e0c6cc9549b289d5457c4952371d62e523 100644 (file)
             ; str.replaceall
             ; str.replace_re
             ; str.replace_re_all
-            ; str.tolower
-            ; str.toupper
+            ; str.to_lower
+            ; str.to_upper
             ; str.rev
             ; str.leq
 ))))))))
index 4e57abb371ffe14a12b4e695a9c17dd0a3373447..5170932f78d8914f0403bdc81d2e229318bd74de 100644 (file)
 (define str.rev (# x term (apply f_str.rev x)))
 (declare f_str.update term)
 (define str.update (# x term (# y term (# z term (apply (apply (apply f_str.update x) y) z)))))
-(declare f_str.tolower term)
-(define str.tolower (# x term (apply f_str.tolower x)))
-(declare f_str.toupper term)
-(define str.toupper (# x term (apply f_str.toupper x)))
+(declare f_str.to_lower term)
+(define str.to_lower (# x term (apply f_str.to_lower x)))
+(declare f_str.to_upper term)
+(define str.to_upper (# x term (apply f_str.to_upper x)))
 (declare f_str.to_code term)
 (define str.to_code (# x term (apply f_str.to_code x)))
 (declare f_str.from_code term)
index 459ded7315c05cb8987be2edac952ce8ad1667e5..7c39e991cb4ce15d1a5bdadea2f95c7e71ea05dc 100644 (file)
@@ -340,8 +340,8 @@ const static std::unordered_map<Kind, std::pair<cvc5::Kind, std::string>>
         KIND_ENUM(STRING_REPLACE_ALL, cvc5::Kind::STRING_REPLACE_ALL),
         KIND_ENUM(STRING_REPLACE_RE, cvc5::Kind::STRING_REPLACE_RE),
         KIND_ENUM(STRING_REPLACE_RE_ALL, cvc5::Kind::STRING_REPLACE_RE_ALL),
-        KIND_ENUM(STRING_TOLOWER, cvc5::Kind::STRING_TOLOWER),
-        KIND_ENUM(STRING_TOUPPER, cvc5::Kind::STRING_TOUPPER),
+        KIND_ENUM(STRING_TO_LOWER, cvc5::Kind::STRING_TO_LOWER),
+        KIND_ENUM(STRING_TO_UPPER, cvc5::Kind::STRING_TO_UPPER),
         KIND_ENUM(STRING_REV, cvc5::Kind::STRING_REV),
         KIND_ENUM(STRING_FROM_CODE, cvc5::Kind::STRING_FROM_CODE),
         KIND_ENUM(STRING_TO_CODE, cvc5::Kind::STRING_TO_CODE),
@@ -652,8 +652,8 @@ const static std::unordered_map<cvc5::Kind, Kind, cvc5::kind::KindHashFunction>
         {cvc5::Kind::STRING_REPLACE_ALL, STRING_REPLACE_ALL},
         {cvc5::Kind::STRING_REPLACE_RE, STRING_REPLACE_RE},
         {cvc5::Kind::STRING_REPLACE_RE_ALL, STRING_REPLACE_RE_ALL},
-        {cvc5::Kind::STRING_TOLOWER, STRING_TOLOWER},
-        {cvc5::Kind::STRING_TOUPPER, STRING_TOUPPER},
+        {cvc5::Kind::STRING_TO_LOWER, STRING_TO_LOWER},
+        {cvc5::Kind::STRING_TO_UPPER, STRING_TO_UPPER},
         {cvc5::Kind::STRING_REV, STRING_REV},
         {cvc5::Kind::STRING_FROM_CODE, STRING_FROM_CODE},
         {cvc5::Kind::STRING_TO_CODE, STRING_TO_CODE},
index a9e5de81c6ec15273930409374f730ea91fab126..f2156f13bf337763f0c5e319fe601b0bc9639716 100644 (file)
@@ -4251,6 +4251,9 @@ class CVC5_EXPORT Solver
   /**
    * Declare a symbolic pool of terms with the given initial value.
    *
+   * For details on how pools are used to specify instructions for quantifier
+   * instantiation, see documentation for the #INST_POOL kind.
+   *
    * SMT-LIB:
    *
    * \verbatim embed:rst:leading-asterisk
@@ -4262,6 +4265,7 @@ class CVC5_EXPORT Solver
    * @param symbol The name of the pool
    * @param sort The sort of the elements of the pool.
    * @param initValue The initial value of the pool
+   * @return The pool symbol
    */
   Term declarePool(const std::string& symbol,
                    const Sort& sort,
index d757406d009ab26c658d1fabe74803f8bbf53c00..edda9845f44c113f12b96042f629fb4f79bdbd7d 100644 (file)
@@ -333,20 +333,11 @@ enum Kind : int32_t
    * Cardinality constraint on uninterpreted sort.
    *
    * Interpreted as a predicate that is true when the cardinality of
-   * uinterpreted Sort @f$S@f$ is less than or equal to the value of
-   * the second argument.
-   *
-   * - Arity: `2`
-   *   - `1:` Term of Sort @f$S@f$
-   *   - `2:` Term of Sort Int (positive integer value that bounds the
-   *          cardinality of @f$S@f$)
+   * uinterpreted Sort @f$S@f$ is less than or equal to an upper bound.
    *
+   * - Arity: `0`
    * - Create Term of this Kind with:
-   *   - Solver::mkTerm(Kind, const std::vector<Term>&) const
-   *   - Solver::mkTerm(const Op&, const std::vector<Term>&) const
-   *
-   * - Create Op of this kind with:
-   *   - Solver::mkOp(Kind, const std::vector<uint32_t>&) const
+   *   - Solver::mkCardinalityConstraint(const Sort&, uint32_t) const
    */
   CARDINALITY_CONSTRAINT,
   /**
@@ -502,7 +493,7 @@ enum Kind : int32_t
    */
   INTS_DIVISION,
   /**
-   * Integer modulus, modulus by `0` undefined.
+   * Integer modulus, modulus by 0 undefined.
    *
    * - Arity: `2`
    *   - `1:` Term of Sort Int
@@ -2176,6 +2167,9 @@ enum Kind : int32_t
   APPLY_UPDATER,
   /**
    * Match expression.
+   
+   * This kind is primarily used in the parser to support the
+   * SMT-LIBv2 `match` expression.
    *
    * For example, the SMT-LIBv2 syntax for the following match term
    * \rst
@@ -2216,7 +2210,7 @@ enum Kind : int32_t
    *
    * - Arity: `2`
    *   - `1:` Term of kind #APPLY_CONSTRUCTOR (the pattern to match against)
-   *   - `2:` Term of any Sort (the term the pattern evaluates to)
+   *   - `2:` Term of any Sort (the term the match term evaluates to)
    *
    * - Create Term of this Kind with:
    *   - Solver::mkTerm(Kind, const std::vector<Term>&) const
@@ -2244,7 +2238,7 @@ enum Kind : int32_t
    *            the case)
    *     - `2:` Term of kind #APPLY_CONSTRUCTOR (the pattern expression,
    *            applying the set of variables to the constructor)
-   *     - `3:` Term of any Sort (the term the pattern evaluates to)
+   *     - `3:` Term of any Sort (the term the match term evaluates to)
    *
    * - Create Term of this Kind with:
    *   - Solver::mkTerm(Kind, const std::vector<Term>&) const
@@ -3270,7 +3264,7 @@ enum Kind : int32_t
    * - Create Op of this kind with:
    *   - Solver::mkOp(Kind, const std::vector<uint32_t>&) const
    */
-  STRING_TOLOWER,
+  STRING_TO_LOWER,
   /**
    * String to upper case.
    *
@@ -3284,7 +3278,7 @@ enum Kind : int32_t
    * - Create Op of this kind with:
    *   - Solver::mkOp(Kind, const std::vector<uint32_t>&) const
    */
-  STRING_TOUPPER,
+  STRING_TO_UPPER,
   /**
    * String reverse.
    *
@@ -3988,6 +3982,8 @@ enum Kind : int32_t
    * Specifies a (list of) terms to be used as a pattern for quantifier
    * instantiation.
    *
+   * @note Should only be used as a child of #INST_PATTERN_LIST.
+   *
    * - Arity: `n > 0`
    *   - `1..n:` Terms of any Sort
    *
@@ -4005,6 +4001,8 @@ enum Kind : int32_t
    * Specifies a (list of) terms that should not be used as a pattern for
    * quantifier instantiation.
    *
+   * @note Should only be used as a child of #INST_PATTERN_LIST.
+   *
    * - Arity: `n > 0`
    *   - `1..n:` Terms of any Sort
    *
@@ -4017,10 +4015,33 @@ enum Kind : int32_t
    */
   INST_NO_PATTERN,
   /**
-   * Instantiation pool.
+   * Instantiation pool annotation.
    *
    * Specifies an annotation for pool based instantiation.
    *
+   * @note Should only be used as a child of #INST_PATTERN_LIST.
+   *
+   * In detail, pool symbols can be declared via the method
+   *  - Solver::declarePool(const std::string&, const Sort&, const std::vector<Term>&) const
+   *
+   * A pool symbol represents a set of terms of a given sort. An instantiation
+   * pool annotation should match the types of the quantified formula.
+   *
+   * For example, for a quantified formula:
+   *
+   * \rst
+   * .. code:: lisp
+   *
+   *     (FORALL (VARIABLE_LIST x y) F (INST_PATTERN_LIST (INST_POOL p q)))
+   * \endrst
+   *
+   * if @f$x@f$ and @f$y@f$ have Sorts @f$S_1@f$ and @f$S_2@f$,
+   * then pool symbols @f$p@f$ and @f$q@f$ should have Sorts
+   * (Set @f$S_1@f$) and (Set @f$S_2@f$), respectively.
+   * This annotation specifies that the quantified formula above should be
+   * instantiated with the product of all terms that occur in the sets @f$p@f$
+   * and @f$q@f$.
+   * 
    * - Arity: `n > 0`
    *   - `1..n:` Terms that comprise the pools, which are one-to-one with the
    *             variables of the quantified formula to be instantiated
@@ -4036,8 +4057,28 @@ enum Kind : int32_t
   /**
    * A instantantiation-add-to-pool annotation.
    *
-   * - Arity: `1`
-   *   - `1:` The pool to add to.
+   * @note Should only be used as a child of #INST_PATTERN_LIST.
+   * 
+   * An instantantiation-add-to-pool annotation indicates that when a quantified
+   * formula is instantiated, the instantiated version of a term should be
+   * added to the given pool.
+   * 
+   * For example, consider a quantified formula:
+   * 
+   * \rst
+   * .. code:: lisp
+   *
+   *     (FORALL (VARIABLE_LIST x) F 
+   *             (INST_PATTERN_LIST (INST_ADD_TO_POOL (ADD x 1) p)))
+   * \endrst
+   * 
+   * where assume that @f$x@f$ has type Int. When this quantified formula is
+   * instantiated with, e.g., the term @f$t@f$, the term `(ADD t 1)` is added to pool @f$p@f$.
+   *
+   * - Arity: `2`
+   *   - `1:` The Term whose free variables are bound by the quantified formula.
+   *   - `2:` The pool to add to, whose Sort should be a set of elements that
+   *          match the Sort of the first argument.
    *
    * - Create Term of this Kind with:
    *   - Solver::mkTerm(Kind, const std::vector<Term>&) const
@@ -4050,8 +4091,29 @@ enum Kind : int32_t
   /**
    * A skolemization-add-to-pool annotation.
    *
-   * - Arity: `1`
-   *   - `1:` The pool to add to.
+   * @note Should only be used as a child of #INST_PATTERN_LIST.
+   *
+   * An skolemization-add-to-pool annotation indicates that when a quantified
+   * formula is skolemized, the skolemized version of a term should be added to
+   * the given pool.
+   *
+   * For example, consider a quantified formula:
+   *
+   * \rst
+   * .. code:: lisp
+   *
+   *     (FORALL (VARIABLE_LIST x) F
+   *             (INST_PATTERN_LIST (SKOLEM_ADD_TO_POOL (ADD x 1) p)))
+   * \endrst
+   *
+   * where assume that @f$x@f$ has type Int. When this quantified formula is
+   * skolemized, e.g., with @f$k@f$ of type Int, then the term `(ADD k 1)` is
+   * added to the pool @f$p@f$.
+   *
+   * - Arity: `2`
+   *   - `1:` The Term whose free variables are bound by the quantified formula.
+   *   - `2:` The pool to add to, whose Sort should be a set of elements that
+   *          match the Sort of the first argument.
    *
    * - Create Term of this Kind with:
    *   - Solver::mkTerm(Kind, const std::vector<Term>&) const
@@ -4067,6 +4129,8 @@ enum Kind : int32_t
    * Specifies a custom property for a quantified formula given by a
    * term that is ascribed a user attribute.
    *
+   * @note Should only be used as a child of #INST_PATTERN_LIST.
+   *
    * - Arity: `n > 0`
    *   - `1:` Term of Kind #CONST_STRING (the keyword of the attribute)
    *   - `2...n:` Terms representing the values of the attribute
@@ -4080,11 +4144,11 @@ enum Kind : int32_t
    */
   INST_ATTRIBUTE,
   /**
-   * A list of instantiation patterns and/or attributes.
+   * A list of instantiation patterns, attributes or annotations.
    *
    * - Arity: `n > 1`
-   *   - `1..n:` Terms of Kind #INST_PATTERN, #INST_NO_PATTERN, or
-   *             #INST_ATTRIBUTE
+   *   - `1..n:` Terms of Kind #INST_PATTERN, #INST_NO_PATTERN, #INST_POOL,
+   *             #INST_ADD_TO_POOL, #SKOLEM_ADD_TO_POOL, #INST_ATTRIBUTE
    *
    * - Create Term of this Kind with:
    *   - Solver::mkTerm(Kind, const std::vector<Term>&) const
index 027d7e588ef74760c9cefe1265a42a5e56b8fcdb..9183c2bf78f906a7ea49cd0db77d69a40689f734 100644 (file)
@@ -160,8 +160,8 @@ void Smt2::addStringOperators() {
   {
     addOperator(api::STRING_INDEXOF_RE, "str.indexof_re");
     addOperator(api::STRING_UPDATE, "str.update");
-    addOperator(api::STRING_TOLOWER, "str.tolower");
-    addOperator(api::STRING_TOUPPER, "str.toupper");
+    addOperator(api::STRING_TO_LOWER, "str.to_lower");
+    addOperator(api::STRING_TO_UPPER, "str.to_upper");
     addOperator(api::STRING_REV, "str.rev");
     // sequence versions
     addOperator(api::SEQ_CONCAT, "seq.++");
index c9125df3d4a59d614385588162f8d427f170f2d4..616c51bab1e1ec389f9a0b43da0e352331e64740 100644 (file)
@@ -1222,8 +1222,8 @@ std::string Smt2Printer::smtKindString(Kind k, Variant v)
   case kind::STRING_REPLACE_ALL: return "str.replace_all";
   case kind::STRING_REPLACE_RE: return "str.replace_re";
   case kind::STRING_REPLACE_RE_ALL: return "str.replace_re_all";
-  case kind::STRING_TOLOWER: return "str.tolower";
-  case kind::STRING_TOUPPER: return "str.toupper";
+  case kind::STRING_TO_LOWER: return "str.to_lower";
+  case kind::STRING_TO_UPPER: return "str.to_upper";
   case kind::STRING_REV: return "str.rev";
   case kind::STRING_PREFIX: return "str.prefixof" ;
   case kind::STRING_SUFFIX: return "str.suffixof" ;
index be8e2de5b292d950aaa65ac5a9e733a70c185604..96ec58890c50c301b4db815fe8048f042774e77b 100644 (file)
@@ -67,8 +67,8 @@ ExtfSolver::ExtfSolver(Env& env,
   d_extt.addFunctionKind(kind::STRING_IN_REGEXP);
   d_extt.addFunctionKind(kind::STRING_LEQ);
   d_extt.addFunctionKind(kind::STRING_TO_CODE);
-  d_extt.addFunctionKind(kind::STRING_TOLOWER);
-  d_extt.addFunctionKind(kind::STRING_TOUPPER);
+  d_extt.addFunctionKind(kind::STRING_TO_LOWER);
+  d_extt.addFunctionKind(kind::STRING_TO_UPPER);
   d_extt.addFunctionKind(kind::STRING_REV);
   d_extt.addFunctionKind(kind::SEQ_UNIT);
   d_extt.addFunctionKind(kind::SEQ_NTH);
@@ -213,7 +213,7 @@ bool ExtfSolver::doReduction(int effort, Node n)
            || k == STRING_STOI || k == STRING_REPLACE || k == STRING_REPLACE_ALL
            || k == SEQ_NTH || k == STRING_REPLACE_RE
            || k == STRING_REPLACE_RE_ALL || k == STRING_LEQ
-           || k == STRING_TOLOWER || k == STRING_TOUPPER || k == STRING_REV)
+           || k == STRING_TO_LOWER || k == STRING_TO_UPPER || k == STRING_REV)
         << "Unknown reduction: " << k;
     std::vector<Node> new_nodes;
     Node res = d_preproc.simplify(n, new_nodes);
index ff226202bf8c346b52f93c5f565152579246ac4e..6ac95bb46a86478a4f30507bc9bf6ff84925c23f 100644 (file)
@@ -34,8 +34,8 @@ operator STRING_ITOS 1 "integer to string"
 operator STRING_STOI 1 "string to integer (total function)"
 operator STRING_TO_CODE 1 "string to code, returns the code of the first character of the string if it has length one, -1 otherwise"
 operator STRING_FROM_CODE 1 "string from code, returns a string containing a single character whose code point matches the argument to this function, empty string if the argument is out-of-bounds"
-operator STRING_TOLOWER 1 "string to lowercase conversion"
-operator STRING_TOUPPER 1 "string to uppercase conversion"
+operator STRING_TO_LOWER 1 "string to lowercase conversion"
+operator STRING_TO_UPPER 1 "string to uppercase conversion"
 operator STRING_REV 1 "string reverse"
 
 sort STRING_TYPE \
@@ -187,8 +187,8 @@ typerule STRING_ITOS "SimpleTypeRule<RString, AInteger>"
 typerule STRING_STOI "SimpleTypeRule<RInteger, AString>"
 typerule STRING_TO_CODE "SimpleTypeRule<RInteger, AString>"
 typerule STRING_FROM_CODE "SimpleTypeRule<RString, AInteger>"
-typerule STRING_TOUPPER "SimpleTypeRule<RString, AString>"
-typerule STRING_TOLOWER "SimpleTypeRule<RString, AString>"
+typerule STRING_TO_UPPER "SimpleTypeRule<RString, AString>"
+typerule STRING_TO_LOWER "SimpleTypeRule<RString, AString>"
 
 ### sequence specific operators
 
index ce95d193f450b4cd07427d04aa7baa2b56d9b156..3a2cbb9005d5ea4398ae737ba30fd5b0d70760ae 100644 (file)
@@ -631,10 +631,10 @@ Node SequencesRewriter::rewriteLength(Node node)
       return returnRewrite(node, retNode, Rewrite::LEN_REPL_INV);
     }
   }
-  else if (nk0 == STRING_TOLOWER || nk0 == STRING_TOUPPER || nk0 == STRING_REV
+  else if (nk0 == STRING_TO_LOWER || nk0 == STRING_TO_UPPER || nk0 == STRING_REV
            || nk0 == STRING_UPDATE)
   {
-    // len( f( x ) ) == len( x ) where f is tolower, toupper, or rev.
+    // len( f( x ) ) == len( x ) where f is to_lower, to_upper, or rev.
     // len( update( x, n, y ) ) = len( x )
     Node retNode = nm->mkNode(STRING_LENGTH, node[0][0]);
     return returnRewrite(node, retNode, Rewrite::LEN_CONV_INV);
index 2ff7598b5d3f087fe6a9cd531de08527024eeab1..000e2e70cfa8949c788e9fd6b02f9552b0943f73 100644 (file)
@@ -49,7 +49,7 @@ RewriteResponse StringsRewriter::postRewrite(TNode node)
   {
     retNode = rewriteStringLeq(node);
   }
-  else if (nk == STRING_TOLOWER || nk == STRING_TOUPPER)
+  else if (nk == STRING_TO_LOWER || nk == STRING_TO_UPPER)
   {
     retNode = rewriteStrConvert(node);
   }
@@ -151,7 +151,7 @@ Node StringsRewriter::rewriteIntToStr(Node node)
 Node StringsRewriter::rewriteStrConvert(Node node)
 {
   Kind nk = node.getKind();
-  Assert(nk == STRING_TOLOWER || nk == STRING_TOUPPER);
+  Assert(nk == STRING_TO_LOWER || nk == STRING_TO_UPPER);
   NodeManager* nm = NodeManager::currentNM();
   if (node[0].isConst())
   {
@@ -162,14 +162,14 @@ Node StringsRewriter::rewriteStrConvert(Node node)
       // transform it
       // upper 65 ... 90
       // lower 97 ... 122
-      if (nk == STRING_TOUPPER)
+      if (nk == STRING_TO_UPPER)
       {
         if (newChar >= 97 && newChar <= 122)
         {
           newChar = newChar - 32;
         }
       }
-      else if (nk == STRING_TOLOWER)
+      else if (nk == STRING_TO_LOWER)
       {
         if (newChar >= 65 && newChar <= 90)
         {
@@ -188,21 +188,21 @@ Node StringsRewriter::rewriteStrConvert(Node node)
     {
       concatBuilder << nm->mkNode(nk, nc);
     }
-    // tolower( x1 ++ x2 ) --> tolower( x1 ) ++ tolower( x2 )
+    // to_lower( x1 ++ x2 ) --> to_lower( x1 ) ++ to_lower( x2 )
     Node retNode = concatBuilder.constructNode();
     return returnRewrite(node, retNode, Rewrite::STR_CONV_MINSCOPE_CONCAT);
   }
-  else if (node[0].getKind() == STRING_TOLOWER
-           || node[0].getKind() == STRING_TOUPPER)
+  else if (node[0].getKind() == STRING_TO_LOWER
+           || node[0].getKind() == STRING_TO_UPPER)
   {
-    // tolower( tolower( x ) ) --> tolower( x )
-    // tolower( toupper( x ) ) --> tolower( x )
+    // to_lower( to_lower( x ) ) --> to_lower( x )
+    // to_lower( toupper( x ) ) --> to_lower( x )
     Node retNode = nm->mkNode(nk, node[0][0]);
     return returnRewrite(node, retNode, Rewrite::STR_CONV_IDEM);
   }
   else if (node[0].getKind() == STRING_ITOS)
   {
-    // tolower( str.from.int( x ) ) --> str.from.int( x )
+    // to_lower( str.from.int( x ) ) --> str.from.int( x )
     return returnRewrite(node, node[0], Rewrite::STR_CONV_ITOS);
   }
   return node;
index 52f1e44d706e264dd20c2e629976b9bdc1e467cf..0ceaa5a41fdc4406812ffaeca5ff107a5a0e5358 100644 (file)
@@ -57,7 +57,7 @@ class StringsRewriter : public SequencesRewriter
   /** rewrite string convert
    *
    * This is the entry point for post-rewriting terms n of the form
-   *   str.tolower( s ) and str.toupper( s )
+   *   str.to_lower( s ) and str.toupper( s )
    * Returns the rewritten form of n.
    */
   Node rewriteStrConvert(Node n);
index 84a290f3c2b4c606bf2495004b202714d2be3682..01e821aba37665daea1a945b75c7b561d676af1e 100644 (file)
@@ -159,7 +159,7 @@ void TermRegistry::preRegisterTerm(TNode n)
         || k == STRING_STOI || k == STRING_REPLACE || k == STRING_SUBSTR
         || k == STRING_REPLACE_ALL || k == SEQ_NTH || k == STRING_REPLACE_RE
         || k == STRING_REPLACE_RE_ALL || k == STRING_CONTAINS || k == STRING_LEQ
-        || k == STRING_TOLOWER || k == STRING_TOUPPER || k == STRING_REV
+        || k == STRING_TO_LOWER || k == STRING_TO_UPPER || k == STRING_REV
         || k == STRING_UPDATE)
     {
       std::stringstream ss;
index 7b1facde1646776e8c409cb1dfdc61c271ccfc8a..af3d2db22a323c84f77abe194c2148a37ea7f2c0 100644 (file)
@@ -156,8 +156,8 @@ void TheoryStrings::finishInit()
   d_equalityEngine->addFunctionKind(kind::STRING_REPLACE_RE, eagerEval);
   d_equalityEngine->addFunctionKind(kind::STRING_REPLACE_RE_ALL, eagerEval);
   d_equalityEngine->addFunctionKind(kind::STRING_REPLACE_ALL, eagerEval);
-  d_equalityEngine->addFunctionKind(kind::STRING_TOLOWER, eagerEval);
-  d_equalityEngine->addFunctionKind(kind::STRING_TOUPPER, eagerEval);
+  d_equalityEngine->addFunctionKind(kind::STRING_TO_LOWER, eagerEval);
+  d_equalityEngine->addFunctionKind(kind::STRING_TO_UPPER, eagerEval);
   d_equalityEngine->addFunctionKind(kind::STRING_REV, eagerEval);
 
   // memberships are not relevant for model building
index ff17efa0ee2b50dd30ab77f14149037995e9236f..8a4bc3dd5d89a0e271e78c51d03aaf94ed1e42c7 100644 (file)
@@ -849,7 +849,7 @@ Node StringsPreprocess::reduce(Node t,
         nm->mkNode(ITE, noMatch, k.eqNode(x), nm->mkNode(AND, lemmas)));
     retNode = k;
   }
-  else if (t.getKind() == STRING_TOLOWER || t.getKind() == STRING_TOUPPER)
+  else if (t.getKind() == STRING_TO_LOWER || t.getKind() == STRING_TO_UPPER)
   {
     Node x = t[0];
     Node r = sc->mkSkolemCached(t, SkolemCache::SK_PURIFY, "r");
@@ -864,11 +864,12 @@ Node StringsPreprocess::reduce(Node t,
     Node ci = nm->mkNode(STRING_TO_CODE, nm->mkNode(STRING_SUBSTR, x, i, one));
     Node ri = nm->mkNode(STRING_TO_CODE, nm->mkNode(STRING_SUBSTR, r, i, one));
 
-    Node lb = nm->mkConstInt(Rational(t.getKind() == STRING_TOUPPER ? 97 : 65));
+    Node lb =
+        nm->mkConstInt(Rational(t.getKind() == STRING_TO_UPPER ? 97 : 65));
     Node ub =
-        nm->mkConstInt(Rational(t.getKind() == STRING_TOUPPER ? 122 : 90));
+        nm->mkConstInt(Rational(t.getKind() == STRING_TO_UPPER ? 122 : 90));
     Node offset =
-        nm->mkConstInt(Rational(t.getKind() == STRING_TOUPPER ? -32 : 32));
+        nm->mkConstInt(Rational(t.getKind() == STRING_TO_UPPER ? -32 : 32));
 
     Node res = nm->mkNode(
         ITE,
index 9deecc921639da0e01e0575130941cf178bbbbca..75d8dd62816f800cec445cf898b1c755b223a62b 100644 (file)
@@ -349,8 +349,8 @@ void printConcatTrace(std::vector<Node>& n, const char* c)
 
 bool isStringKind(Kind k)
 {
-  return k == STRING_STOI || k == STRING_ITOS || k == STRING_TOLOWER
-         || k == STRING_TOUPPER || k == STRING_LEQ || k == STRING_LT
+  return k == STRING_STOI || k == STRING_ITOS || k == STRING_TO_LOWER
+         || k == STRING_TO_UPPER || k == STRING_LEQ || k == STRING_LT
          || k == STRING_FROM_CODE || k == STRING_TO_CODE;
 }
 
index b71360c2cde12b210b80071e7cee4b4b441b6f99..ce7bc390790bc79461e80458392fc5df9d2c81eb 100644 (file)
@@ -4,5 +4,5 @@
 (declare-fun x () String)
 (declare-fun y () String)
 (assert (= (str.++ (str.rev "abc") "d") x))
-(assert (= (str.++ (str.tolower "ABC") (str.toupper "abc")) y))
+(assert (= (str.++ (str.to_lower "ABC") (str.to_upper "abc")) y))
 (check-sat)
index 217255807a2b24f2508c0366a4ac1b8d46e686c7..4eb4bce6fc205d5f6141af9edcace5606b39a8f2 100644 (file)
@@ -7,9 +7,9 @@
 (declare-fun y () Int)
 
 (assert (or 
-(not (= (str.tolower (str.toupper (str.tolower x))) (str.tolower x)))
-(not (= (str.tolower (str.++ x "A")) (str.++ (str.tolower x) "a")))
-(not (= (str.tolower (str.from_int y)) (str.from_int y)))
+(not (= (str.to_lower (str.to_upper (str.to_lower x))) (str.to_lower x)))
+(not (= (str.to_lower (str.++ x "A")) (str.++ (str.to_lower x) "a")))
+(not (= (str.to_lower (str.from_int y)) (str.from_int y)))
 ))
 
 (check-sat)
index 5de5a2447810dbffa6b0ec59c22debcbf199f6a1..4252d7d0dc6a91e7ec02aa43b2240b150811fa12 100644 (file)
@@ -5,7 +5,7 @@
 (declare-const y String)
 (declare-const z String)
 
-(assert (= (str.tolower "aBCDef") x))
+(assert (= (str.to_lower "aBCDef") x))
 (assert (= x (str.++ y "c" z)))
 
 (check-sat)
index ca20076cbb1e5c4a2fd01bf92365ee0cbbd5be43..9ee103895080591da067cc819660eb325f3c3173 100644 (file)
@@ -3,7 +3,7 @@
 (set-logic ALL)
 (set-info :status sat)
 (declare-fun x () String)
-(assert (= (str.rev (str.toupper x)) "CBA"))
+(assert (= (str.rev (str.to_upper x)) "CBA"))
 (assert (not (= x "ABC")))
 (assert (not (= x "abc")))
 (check-sat)
index 80c797b3ebd243c323422210943da9971fa0379a..821812b4f411ab011cf95c176c292349870c2107 100644 (file)
@@ -4,8 +4,8 @@
 (declare-const x String)
 (declare-const y String)
 
-(assert (= (str.tolower x) "abcde"))
-(assert (= (str.tolower y) "abcde"))
+(assert (= (str.to_lower x) "abcde"))
+(assert (= (str.to_lower y) "abcde"))
 (assert (not (= x "abcde")))
 (assert (not (= y "abcde")))
 (assert (not (= x y)))
index b31aa9ad1879fe9b1353a147842b9ed1bf2e2139..e32f4a8e971c4152dce394186ff8f720a061f42a 100644 (file)
@@ -3301,7 +3301,7 @@ TEST_F(TestApiBlackSolver, proj_issue422)
   Term t234 = slv.mkTerm(Kind::SET_CHOOSE, {t212});
   Term t250 = slv.mkTerm(Kind::STRING_REPLACE_RE_ALL, {t1, t92, t1});
   Term t259 = slv.mkTerm(Kind::STRING_REPLACE_ALL, {t234, t234, t250});
-  Term t263 = slv.mkTerm(Kind::STRING_TOLOWER, {t259});
+  Term t263 = slv.mkTerm(Kind::STRING_TO_LOWER, {t259});
   Term t272 = slv.mkTerm(Kind::BITVECTOR_SDIV, {t211, t66});
   Term t276 = slv.mkTerm(slv.mkOp(Kind::BITVECTOR_ZERO_EXTEND, {71}), {t272});
   Term t288 = slv.mkTerm(Kind::EQUAL, {t263, t1});