<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://cvc4.stanford.edu/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mattarei</id>
		<title>CVC4 - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://cvc4.stanford.edu/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mattarei"/>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/wiki/Special:Contributions/Mattarei"/>
		<updated>2026-04-09T15:31:54Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>http://cvc4.stanford.edu/w/index.php?title=Support&amp;diff=5520</id>
		<title>Support</title>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/w/index.php?title=Support&amp;diff=5520"/>
				<updated>2017-02-08T18:21:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mattarei: /* Technical Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Technical Support=&lt;br /&gt;
&lt;br /&gt;
Please send all bug reports to [mailto:cvc-bugs@cs.stanford.edu cvc-bugs@cs.nyu.edu], or use the [http://cvc4.cs.stanford.edu/bugzilla3/ CVC4 Bugzilla tracker].&lt;br /&gt;
If you have a question, a feature request, or would like to contribute in some way, &lt;br /&gt;
please contact one of the project leaders.&lt;br /&gt;
&lt;br /&gt;
=Mailing List=&lt;br /&gt;
&lt;br /&gt;
[http://www.cs.nyu.edu/mailman/listinfo/cvc-users The CVC-USERS list] is for users of CVC3 and CVC4. &lt;br /&gt;
We will make periodic announcements to this list and users are also encouraged to use it for discussion.&lt;/div&gt;</summary>
		<author><name>Mattarei</name></author>	</entry>

	<entry>
		<id>http://cvc4.stanford.edu/w/index.php?title=Strings&amp;diff=5519</id>
		<title>Strings</title>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/w/index.php?title=Strings&amp;diff=5519"/>
				<updated>2017-02-08T18:17:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mattarei: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes support for the theory of strings in CVC4.&lt;br /&gt;
&lt;br /&gt;
=Syntax=&lt;br /&gt;
This document focuses on input written in SMT-LIB 2 format. &lt;br /&gt;
A frontend for CVC4's native syntax is not available yet.&lt;br /&gt;
&lt;br /&gt;
'''We highly recommend that users use SMT-LIB [http://smt-lib.org/language.shtml Version 2.5], &lt;br /&gt;
instead of Version 2.0.''' &lt;br /&gt;
The major difference is in the definition of escape sequences for string literals.&lt;br /&gt;
&lt;br /&gt;
'''The syntax below is for CVC4 version &amp;gt; 1.4.''' Version 1.3 has only&lt;br /&gt;
''partial'' support for syntax in this document.&lt;br /&gt;
&lt;br /&gt;
Since the string (sub)solver is still relatively new, the current stable version &lt;br /&gt;
of CVC4 (1.4) does not provide the latest version of that solver.  &lt;br /&gt;
Please use our latest Development version instead.&lt;br /&gt;
&lt;br /&gt;
Currently, the string solver supports string constants over a set of characters&lt;br /&gt;
limited to the printable ASCII characters. Other characters ''must'' be encoded &lt;br /&gt;
with escape sequences. &lt;br /&gt;
For arbitry alphabets, we plan to provide later a separate solver &lt;br /&gt;
for a theory of parametric sequences.&lt;br /&gt;
&lt;br /&gt;
To use the string solver it is important to declare initially &lt;br /&gt;
(using the &amp;lt;code&amp;gt;set-logic&amp;lt;/code&amp;gt; command) an SMT-LIB logic that includes strings.&lt;br /&gt;
Since the SMT-LIB standard does not have an official theory of strings and &lt;br /&gt;
related logics yet, the logic names described below are tentative and &lt;br /&gt;
might change later.&lt;br /&gt;
&lt;br /&gt;
The basic logic is &amp;lt;code&amp;gt;QF_S&amp;lt;/code&amp;gt; consisting of quantifier-free formulas &lt;br /&gt;
over just the theory of strings, e.g.:&lt;br /&gt;
  (set-logic QF_S)&lt;br /&gt;
&lt;br /&gt;
A summary of the relevant syntax for strings in the SMT2, CVC, and API is below.  Note that regular expressions are not yet supported in the CVC format.  More details on these operators can be found later in this page.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;0&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! CVC language&lt;br /&gt;
! SMTLIB language&lt;br /&gt;
! C++ API&lt;br /&gt;
|-&lt;br /&gt;
| Logic string&lt;br /&gt;
| Not needed&lt;br /&gt;
| preappend &amp;quot;S&amp;quot; for strings&lt;br /&gt;
| preappend &amp;quot;S&amp;quot; for strings&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;(set-logic QF_'''S'''LIA)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;smt.setLogic(&amp;quot;QF_'''S'''LIA&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| String Sort&lt;br /&gt;
| &amp;lt;code&amp;gt;STRING&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.stringType();&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| String literals&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;abcdef&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;abcdef&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkConst( '''::CVC4::String'''(&amp;quot;abcdef&amp;quot;) );&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Concatenation&lt;br /&gt;
| &amp;lt;code&amp;gt;'''CONCAT'''( X1, ..., Xn )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.++''' X1 ... Xn )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_CONCAT''', X1, ..., Xn);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Length&lt;br /&gt;
| &amp;lt;code&amp;gt;'''LENGTH'''( x )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.len''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_LENGTH''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| String contains &lt;br /&gt;
| &amp;lt;code&amp;gt;'''CONTAINS'''( X, Y )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.contains''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_STRCTN''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Index of&lt;br /&gt;
| &amp;lt;code&amp;gt;'''INDEXOF'''( X, Y, N )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.indexof''' X Y N)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_STRIDOF''', X, Y, N);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Replace&lt;br /&gt;
| &amp;lt;code&amp;gt;'''REPLACE'''( X, Y, Z )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.replace''' X Y Z)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_STRREPL''', X, Y, Z);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Substring&lt;br /&gt;
| &amp;lt;code&amp;gt;'''SUBSTR'''( X, Y )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.substr''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_SUBSTR''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Prefix of &lt;br /&gt;
| &amp;lt;code&amp;gt;'''PREFIXOF'''( X, Y )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.prefixof''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_PREFIX''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Suffix of&lt;br /&gt;
| &amp;lt;code&amp;gt;'''SUFFIXOF'''( X, Y )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.suffixof''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_SUFFIX''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| String to Integer&lt;br /&gt;
| &amp;lt;code&amp;gt;'''STRING_TO_INTEGER'''( X )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.to.int''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_STOI''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Integer to String&lt;br /&gt;
| &amp;lt;code&amp;gt;'''INTEGER_TO_STRING'''( X )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''int.to.str''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_ITOS''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| String to Integer (16-bit)&lt;br /&gt;
| &amp;lt;code&amp;gt;'''STRING_TO_UINT16'''( X )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.to.u16''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_STOU16''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Integer (16-bit) to String&lt;br /&gt;
| &amp;lt;code&amp;gt;'''UINT16_TO_STRING'''( X )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''u16.to.str''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_U16TOS''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| String to Integer (32-bit)&lt;br /&gt;
| &amp;lt;code&amp;gt;'''STRING_TO_UINT32'''( X )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.to.u32''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_STOU32''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Integer (32-bit) to String&lt;br /&gt;
| &amp;lt;code&amp;gt;'''UINT32_TO_STRING'''( X )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''u32.to.str''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_U32TOS''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Character at &lt;br /&gt;
| &amp;lt;code&amp;gt;'''CHARAT'''( X, N )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.at''' X N)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_CHARAT''', X, N);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Regular expression sort&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;RegExp&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.regExpType();&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Membership in regular expression&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.in.re''' X R)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_IN_REGEXP''', X, R);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| String to regular expression&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''str.to.re''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::STRING_TO_REGEXP''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Regular expression concatenation&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''re.++''' R1 ... Rn)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::REGEXP_CONCAT''', R1, ..., Rn);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Regular expression union&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''re.union''' R1 ... Rn)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::REGEXP_UNION''', R1, ..., Rn);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Regular expression intersection&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''re.inter''' R1 ... Rn)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::REGEXP_INTER''', R1, ..., Rn);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Regular expression Kleene star&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''re.*''' R)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::REGEXP_STAR''', R);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Regular expression plus&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''re.+''' R)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::REGEXP_PLUS''', R);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Regular expression option&lt;br /&gt;
| &amp;lt;code&amp;gt;n/a&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''re.opt''' R)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::REGEXP_OPT''', R);&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Options==&lt;br /&gt;
Some functions in the theory are have only experimental support currently and &lt;br /&gt;
are disabled by default (even in the &amp;lt;code&amp;gt;ALL_SUPPORTED&amp;lt;/code&amp;gt; logic:&lt;br /&gt;
To use them:&lt;br /&gt;
  (set-option :strings-exp true)&lt;br /&gt;
&lt;br /&gt;
The solver can be run in ''finite model finding mode'' which guarantees &lt;br /&gt;
termination for satisfiable problems. &lt;br /&gt;
This mode is disabled by default. To enable it:&lt;br /&gt;
  (set-option :strings-fmf true)&lt;br /&gt;
Note that in this mode the solver is much '''slower''' than in default mode, &lt;br /&gt;
so we recommend it only as a fall back option when the default mode fails &lt;br /&gt;
to find a solution with a reasonably large timeout.&lt;br /&gt;
&lt;br /&gt;
To select the strategy of LB rule application: 0-lazy, 1-eager, 2-no (0 by default):&lt;br /&gt;
  (set-option :strings-lb 1)&lt;br /&gt;
&lt;br /&gt;
To set up string alphabet cardinality (256 by default, expert option):&lt;br /&gt;
  (set-option :strings-alphabet-card n)&lt;br /&gt;
This is a reserved option for the extension of the sequence theory.&lt;br /&gt;
&lt;br /&gt;
==Alphabet==&lt;br /&gt;
Currently, the solver's theory is based on an alphabet consisting of the 256 &lt;br /&gt;
characters from (8-bit) Extended ASCII. &lt;br /&gt;
Since there are several versions of Extended ASCII, we allow string constants &lt;br /&gt;
to contain only ''printable US ASCII characters'', which are encoded &lt;br /&gt;
in the same way in all Extended ASCII versions.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The alphabet will change to the one prescribed by the SMT-LIB standard&lt;br /&gt;
once there is one.&lt;br /&gt;
&lt;br /&gt;
==Printable Characters==&lt;br /&gt;
A ''printable'' character is any character with numerical value between 0x20 and 0x7e &lt;br /&gt;
in the standard US ASCII encoding.&lt;br /&gt;
&lt;br /&gt;
==Escape Sequences in String Constants==&lt;br /&gt;
String constants are denoted by SMT-LIB string literals consisting of sequences of printable characters delimited by double-quotes (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
We support escape sequences used in most programming languages &lt;br /&gt;
to represent non-printable characters. &lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt; … &amp;lt;code&amp;gt;\9&amp;lt;/code&amp;gt;&lt;br /&gt;
| represents ASCII character 0 … 9, respectively&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\f&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\t&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\v&amp;lt;/code&amp;gt;&lt;br /&gt;
| represents its corresponding ASCII character (C++ convention)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;''ooo''&lt;br /&gt;
| encodes a single ASCII character where ''ooo'' consists of exactly three digits in the octal encoding of the character (from 0 to 377). For example, &amp;lt;code&amp;gt;\101&amp;lt;/code&amp;gt; represents &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;. '''Note:''' going beyond value 377 might give unexpected results. For instance, &amp;lt;code&amp;gt;\437&amp;lt;/code&amp;gt; will be translated in the two-character string &amp;lt;code&amp;gt;#7&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;\x&amp;lt;/code&amp;gt;''NN''&lt;br /&gt;
| encodes a single ASCII character, where ''NN'' consists of exactly two digits in the exadecimal encoding of the character.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The backslash character (&amp;lt;code&amp;gt;\&amp;lt;/code&amp;gt;) is silently ignored when it is followed by a sequence of characters not recognized as an escape sequence. For example, &amp;lt;code&amp;gt;\$ &amp;lt;/code&amp;gt;, say, is parsed as if it was just &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
When CVC4 outputs a string constant, a non-printable/extended ASCII character is printed in the exadecimal format &amp;lt;code&amp;gt;\x&amp;lt;/code&amp;gt;''NN'', except for the character denoted by the escape sequences &amp;lt;code&amp;gt;\a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\f&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\t&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;\v&amp;lt;/code&amp;gt;, which are printed using those escape sequences.&lt;br /&gt;
&lt;br /&gt;
'''Note''': &lt;br /&gt;
These escape sequences are specific to string constants in the theory of strings. They are 'not' escape sequences in SMT-LIB 2 per se.&lt;br /&gt;
SMT-LIB 2.5 has only one escape sequence for string literals: &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;, &lt;br /&gt;
which denotes the double quotes character. &lt;br /&gt;
This means that a string literal like  &amp;lt;code&amp;gt;&amp;quot;a&amp;quot;&amp;quot;c&amp;quot;&amp;lt;/code&amp;gt; is read by the solver as the string constant consisting of the characters &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;.&lt;br /&gt;
The same constant can be entered as &amp;lt;code&amp;gt;&amp;quot;a\042c&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;a\x22c&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Theory Signature==&lt;br /&gt;
To define a string variable, i.e., a free string constant:&lt;br /&gt;
  (declare-fun x () String)&lt;br /&gt;
Alternatively:&lt;br /&gt;
  (declare-const x () String)&lt;br /&gt;
&lt;br /&gt;
String Concatenation:&lt;br /&gt;
  (str.++ s1 s2 ... sn)&lt;br /&gt;
where s1, s2, ..., and sn are string terms. String concatenation takes at least 2 arguments.&lt;br /&gt;
&lt;br /&gt;
String Length:&lt;br /&gt;
  (str.len s)&lt;br /&gt;
where s is a string term.&lt;br /&gt;
&lt;br /&gt;
Character in String:&lt;br /&gt;
  (str.at s i)&lt;br /&gt;
where s is a string term and i is an integer.&lt;br /&gt;
The index is starting from 0.&lt;br /&gt;
&lt;br /&gt;
Sub-String:&lt;br /&gt;
  (str.substr s i j )&lt;br /&gt;
where s is a string term, i and j are integers.&lt;br /&gt;
&lt;br /&gt;
==Escape Sequences for Regular Expressions==&lt;br /&gt;
Currently, it is for CVC format only. (Coming soon.)&lt;br /&gt;
&lt;br /&gt;
==Symbolic Regular Expression==&lt;br /&gt;
Membership Constraint:&lt;br /&gt;
  (str.in.re s r)&lt;br /&gt;
where s is a string term and r is a regular expression.&lt;br /&gt;
&lt;br /&gt;
String to Regular Expression Conversion:&lt;br /&gt;
  (str.to.re s)&lt;br /&gt;
where s is a string term. The statement turns a regular expression that only contains a string s.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Concatenation:&lt;br /&gt;
  (re.++ r_1 r_2 ... r_n)&lt;br /&gt;
where r_1, r_2, ..., r_n are regular expressions.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Alternation:&lt;br /&gt;
  (re.union r_1 r_2 ... r_n)&lt;br /&gt;
where r_1, r_2, ..., r_n are regular expressions. re.or is for releases before March, 2014.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Intersection:&lt;br /&gt;
  (re.inter r_1 r_2 ... r_n)&lt;br /&gt;
where r_1, r_2, ..., r_n are regular expressions. re.itr is for releases before March, 2014.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Kleene-Star:&lt;br /&gt;
  (re.* r)&lt;br /&gt;
where r is a regular expression.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Kleene-Cross:&lt;br /&gt;
  (re.+ r)&lt;br /&gt;
where r is a regular expression.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Option:&lt;br /&gt;
  (re.opt r)&lt;br /&gt;
where r is a regular expression.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Range:&lt;br /&gt;
  (re.range s t)&lt;br /&gt;
where s, t are single characters in double quotes, e.g. &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;.&lt;br /&gt;
It returns a regular expression that contains any character between s and t.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Loop:&lt;br /&gt;
  (re.loop r l u)&lt;br /&gt;
where r is a regular expression, l is a non-negative constant integer, and u is a non-negative constant integer.&lt;br /&gt;
It returns a regular expression that contains at least l repetitions of r and at most u repetitions of r.&lt;br /&gt;
If l &amp;gt;= u, it returns exactly l repetitions of r.&lt;br /&gt;
&lt;br /&gt;
Regular Expression Loop-2:&lt;br /&gt;
  (re.loop r l)&lt;br /&gt;
where r is a regular expression, and l is a non-negative constant integer.&lt;br /&gt;
It returns a regular expression that contains at least l repetitions of r.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Empty Regular Expression:&lt;br /&gt;
  re.nostr&lt;br /&gt;
&lt;br /&gt;
The Regular Expression that contains all characters:&lt;br /&gt;
  re.allchar&lt;br /&gt;
&lt;br /&gt;
==Experimental Mode==&lt;br /&gt;
Following functions are under the --strings-exp option. They are under active refinement. Once they are stable, we will move them to the default mode. Please let us know when you have some suggestions.&lt;br /&gt;
&lt;br /&gt;
String Char-At:&lt;br /&gt;
  (str.at s i)&lt;br /&gt;
where s is a string term and i is an integer term. i is the position. If i is negative or greater than or equal to the length of s, then (str.at s i) returns the empty string.&lt;br /&gt;
&lt;br /&gt;
String Sub-string:&lt;br /&gt;
  (str.substr s i j)&lt;br /&gt;
where s is a string term and i, j are integer terms. i is the starting position, and j is the offset. If i is negative, it returns the empty string; otherwise, it returns the substring (of s) that begins at the specified index i and extends to the length j (or to the last character of s if the length of s is shorter than i + j).&lt;br /&gt;
&lt;br /&gt;
String Contain:&lt;br /&gt;
  (str.contains s t)&lt;br /&gt;
where s and t are string terms. It returns true if the string s contains the string t.&lt;br /&gt;
This function determines whether the string t can be found within the string s, returning true or false as appropriate.&lt;br /&gt;
&lt;br /&gt;
String IndexOf:&lt;br /&gt;
 (str.indexof s t i)&lt;br /&gt;
where s is a string, t is a non-empty string and i is a non-negative integer.&lt;br /&gt;
This function returns the position of the first occurrence of the specified value t in the string s after the index i.&lt;br /&gt;
It returns -1 if the value to search for does not occur.&lt;br /&gt;
&lt;br /&gt;
String Replacement:&lt;br /&gt;
 (str.replace s t1 t2)&lt;br /&gt;
where s, t1 and t2 are string terms, t1 is non-empty.&lt;br /&gt;
This function searches the string s for the specified value t1, and returns a new string where the first occurrence of the specified value t1 is replaced by the string t2.&lt;br /&gt;
&lt;br /&gt;
String PrefixOf:&lt;br /&gt;
 (str.prefixof s t)&lt;br /&gt;
where s and t are string terms. It returns true if the string s is a prefix of the string t.&lt;br /&gt;
&lt;br /&gt;
String SuffixOf:&lt;br /&gt;
 (str.suffixof s t)&lt;br /&gt;
where s and t are string terms. It returns true if the string s is a suffix of the string t.&lt;br /&gt;
&lt;br /&gt;
String To Integer Conversion:&lt;br /&gt;
 (str.to.int s)&lt;br /&gt;
where s is a string term. It returns the corresponding natural number if s is string of digits; otherwise, it returns -1.&lt;br /&gt;
&lt;br /&gt;
Integer To String Conversion:&lt;br /&gt;
 (int.to.str i)&lt;br /&gt;
where i is an integer term. It returns the corresponding string if i is a natural number; otherwise, it returns an empty string.&lt;br /&gt;
&lt;br /&gt;
=Extensions=&lt;br /&gt;
Together with other engine in CVC4, we can extend new functionality in the theory of strings. For example,&lt;br /&gt;
  (define-fun fun1 ((?x String) (?s String)) Bool&lt;br /&gt;
    (or (= ?x ?s)&lt;br /&gt;
        (&amp;gt; (str.len ?x) (str.len ?s))&lt;br /&gt;
     ))&lt;br /&gt;
Quantifiers over bounded Integers (with strings in the body) are supported in the experimental mode; however, quantifiers over strings are still under development.&lt;br /&gt;
&lt;br /&gt;
=Limitations=&lt;br /&gt;
The decidability of this theory is unknown.&lt;br /&gt;
For satisfiable problems (without extensions), our solver is sound, complete and terminating in the FMF mode (although the FMF mode will be slower than the default mode in general). For unsatisfiable problems, termination is not guaranteed; however, users can tune the options for termination.&lt;br /&gt;
&lt;br /&gt;
The current version of the solver supports ASCII characters only. We might move on to UNICODE in future versions.&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
Find an assignment for x, where x.&amp;quot;ab&amp;quot;=&amp;quot;ba&amp;quot;.x and the length of x equals to 7.&lt;br /&gt;
  (set-logic QF_S)&lt;br /&gt;
  &lt;br /&gt;
  (declare-fun x () String)&lt;br /&gt;
  &lt;br /&gt;
  (assert (= (str.++ x &amp;quot;ab&amp;quot;) (str.++ &amp;quot;ba&amp;quot; x)))&lt;br /&gt;
  (assert (= (str.len x) 7))&lt;br /&gt;
  &lt;br /&gt;
  (check-sat)&lt;br /&gt;
&lt;br /&gt;
Find assignments for x and y, where x and y are distinct and their lengths are equal.&lt;br /&gt;
  (set-logic QF_S)&lt;br /&gt;
  &lt;br /&gt;
  (declare-fun x () String)&lt;br /&gt;
  (declare-fun y () String)&lt;br /&gt;
  &lt;br /&gt;
  (assert (not (=  x y)))&lt;br /&gt;
  (assert (= (str.len x) (str.len y)))&lt;br /&gt;
  &lt;br /&gt;
  (check-sat)&lt;br /&gt;
&lt;br /&gt;
Find assignments for x and y, where x.y != y.x.&lt;br /&gt;
  (set-logic QF_S)&lt;br /&gt;
  &lt;br /&gt;
  (declare-fun x () String)&lt;br /&gt;
  (declare-fun y () String)&lt;br /&gt;
  (assert (not (= (str.++ x y) (str.++ y x))))&lt;br /&gt;
  &lt;br /&gt;
  (check-sat)&lt;br /&gt;
&lt;br /&gt;
Find a model for x, y and z, where x.&amp;quot;ab&amp;quot;.y=y.&amp;quot;ba&amp;quot;.z and z=x.y and x.&amp;quot;a&amp;quot;!=&amp;quot;a&amp;quot;.x.&lt;br /&gt;
  (set-logic QF_S)&lt;br /&gt;
  &lt;br /&gt;
  (declare-fun x () String)&lt;br /&gt;
  (declare-fun y () String)&lt;br /&gt;
  (declare-fun z () String)&lt;br /&gt;
  &lt;br /&gt;
  (assert (= (str.++ x &amp;quot;ab&amp;quot; y) (str.++ y &amp;quot;ba&amp;quot; z)))&lt;br /&gt;
  (assert (= z (str.++ x y)))&lt;br /&gt;
  (assert (not (= (str.++ x &amp;quot;a&amp;quot;) (str.++ &amp;quot;a&amp;quot; x))))&lt;br /&gt;
  &lt;br /&gt;
  (check-sat)&lt;br /&gt;
&lt;br /&gt;
Find a model for x and y, where both x and y are in the RegEx (a*b)* and they are different but have the same length.&lt;br /&gt;
  (set-logic QF_S)&lt;br /&gt;
  (set-option :strings-fmf true)&lt;br /&gt;
  &lt;br /&gt;
  (declare-fun x () String)&lt;br /&gt;
  (declare-fun y () String)&lt;br /&gt;
  &lt;br /&gt;
  (assert&lt;br /&gt;
    (str.in.re x&lt;br /&gt;
       (re.* (re.++ (re.* (str.to.re &amp;quot;a&amp;quot;) ) (str.to.re &amp;quot;b&amp;quot;) ))))&lt;br /&gt;
  (assert (str.in.re y&lt;br /&gt;
       (re.* (re.++ (re.* (str.to.re &amp;quot;a&amp;quot;) ) (str.to.re &amp;quot;b&amp;quot;) ))))&lt;br /&gt;
  &lt;br /&gt;
  (assert (not (= x y)))&lt;br /&gt;
  (assert (= (str.len x) (str.len y)))&lt;br /&gt;
  &lt;br /&gt;
  (check-sat)&lt;br /&gt;
&lt;br /&gt;
=API=&lt;br /&gt;
More details can be found in the [http://cvc4.cs.stanford.edu/wiki/Tutorials Tutorials].&lt;br /&gt;
&lt;br /&gt;
==C++==&lt;br /&gt;
The example can be found in [https://github.com/CVC4/CVC4/blob/master/examples/api/strings.cpp examples/api/strings.cpp].&lt;br /&gt;
&lt;br /&gt;
If setting the logic, use &amp;quot;S&amp;quot; to enable theory of strings.&lt;br /&gt;
  smt.setLogic(&amp;quot;S&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
To create a string type, call &amp;lt;code&amp;gt;mkSetType&amp;lt;/code&amp;gt; in the &amp;lt;code&amp;gt;ExprManager&amp;lt;/code&amp;gt;.&lt;br /&gt;
  Type string = em.stringType();&lt;br /&gt;
&lt;br /&gt;
Make some string literals:&lt;br /&gt;
  // std::string&lt;br /&gt;
  std::string std_str_ab(&amp;quot;ab&amp;quot;);&lt;br /&gt;
  // CVC4::String&lt;br /&gt;
  CVC4::String cvc4_str_ab(std_str_ab);&lt;br /&gt;
  CVC4::String cvc4_str_abc(&amp;quot;abc&amp;quot;);&lt;br /&gt;
  // String constants&lt;br /&gt;
  Expr ab = em.mkConst(cvc4_str_ab);&lt;br /&gt;
  Expr abc = em.mkConst(CVC4::String(&amp;quot;abc&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
Make some string variables:&lt;br /&gt;
  Expr x = em.mkVar(&amp;quot;x&amp;quot;, string);&lt;br /&gt;
  Expr y = em.mkVar(&amp;quot;y&amp;quot;, string);&lt;br /&gt;
  Expr z = em.mkVar(&amp;quot;z&amp;quot;, string);&lt;br /&gt;
&lt;br /&gt;
Make some string constraints:&lt;br /&gt;
  // String concatenation: x.ab.y&lt;br /&gt;
  Expr lhs = em.mkExpr(kind::STRING_CONCAT, x, ab, y);&lt;br /&gt;
  // String concatenation: abc.z&lt;br /&gt;
  Expr rhs = em.mkExpr(kind::STRING_CONCAT, abc, z);&lt;br /&gt;
  // x.ab.y = abc.z&lt;br /&gt;
  Expr formula1 = em.mkExpr(kind::EQUAL, lhs, rhs);&lt;br /&gt;
  // Length of y: |y|&lt;br /&gt;
  Expr leny = em.mkExpr(kind::STRING_LENGTH, y);&lt;br /&gt;
  // |y| &amp;gt;= 0&lt;br /&gt;
  Expr formula2 = em.mkExpr(kind::GEQ, leny, em.mkConst(Rational(0)));&lt;br /&gt;
  // Regular expression: (ab[c-e]*f)|g|h&lt;br /&gt;
  Expr r = em.mkExpr(kind::REGEXP_UNION,&lt;br /&gt;
  em.mkExpr(kind::REGEXP_CONCAT,&lt;br /&gt;
  em.mkExpr(kind::STRING_TO_REGEXP, em.mkConst(String(&amp;quot;ab&amp;quot;))),&lt;br /&gt;
  em.mkExpr(kind::REGEXP_STAR,&lt;br /&gt;
  em.mkExpr(kind::REGEXP_RANGE, em.mkConst(String(&amp;quot;c&amp;quot;)), em.mkConst(String(&amp;quot;e&amp;quot;)))),&lt;br /&gt;
  em.mkExpr(kind::STRING_TO_REGEXP, em.mkConst(String(&amp;quot;f&amp;quot;)))),&lt;br /&gt;
  em.mkExpr(kind::STRING_TO_REGEXP, em.mkConst(String(&amp;quot;g&amp;quot;))),&lt;br /&gt;
  em.mkExpr(kind::STRING_TO_REGEXP, em.mkConst(String(&amp;quot;h&amp;quot;))));&lt;br /&gt;
  // String variables&lt;br /&gt;
  Expr s1 = em.mkVar(&amp;quot;s1&amp;quot;, string);&lt;br /&gt;
  Expr s2 = em.mkVar(&amp;quot;s2&amp;quot;, string);&lt;br /&gt;
  // String concatenation: s1.s2&lt;br /&gt;
  Expr s = em.mkExpr(kind::STRING_CONCAT, s1, s2);&lt;br /&gt;
  // s1.s2 in (ab[c-e]*f)|g|h&lt;br /&gt;
  Expr formula3 = em.mkExpr(kind::STRING_IN_REGEXP, s, r);&lt;br /&gt;
&lt;br /&gt;
Make a query:&lt;br /&gt;
  Expr q = em.mkExpr(kind::AND,&lt;br /&gt;
    formula1,&lt;br /&gt;
    formula2,&lt;br /&gt;
    formula3);&lt;br /&gt;
&lt;br /&gt;
Check the result:&lt;br /&gt;
  Result result = smt.checkSat(q);&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;CVC4 reports: &amp;quot; &amp;lt;&amp;lt; q &amp;lt;&amp;lt; &amp;quot; is &amp;quot; &amp;lt;&amp;lt; result &amp;lt;&amp;lt; &amp;quot;.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  if(result == Result::SAT) {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; x = &amp;quot; &amp;lt;&amp;lt; smt.getValue(x) &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; s1.s2 = &amp;quot; &amp;lt;&amp;lt; smt.getValue(s) &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Java==&lt;br /&gt;
The example can be found in [https://github.com/CVC4/CVC4/blob/master/examples/api/java/Strings.java examples/api/java/Strings.java].&lt;br /&gt;
&lt;br /&gt;
==Unsat Cores==&lt;br /&gt;
The string solver supports the generation of unsatisfiable cores. &lt;br /&gt;
As with other subsolvers though, you must enable proofs at configuration time, &lt;br /&gt;
and then run CVC with &amp;quot;--dump-unsat-cores&amp;quot; flag.&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
* Tianyi Liang, Andrew Reynolds, Nestan Tsiskaridze, Cesare Tinelli, Clark Barrett, and Morgan Deters. [http://dl.acm.org/citation.cfm?id=2994123 An efficient SMT solver for string constraints]. Formal Methods in System Design. 2016. &lt;br /&gt;
* Tianyi Liang, Nestan Tsiskaridze, Andrew Reynolds, Cesare Tinelli, and Clark Barrett. [http://link.springer.com/chapter/10.1007/978-3-319-24246-0_9 A Decision Procedure for Regular Membership and Length Constraints over Unbounded Strings]. In Proceedings of the 10th International Symposium on Frontiers of Combining Systems (FroCoS'15), Wroclaw, Poland, 2015.&lt;br /&gt;
* Tianyi Liang, Andrew Reynolds, Cesare Tinelli, Clark Barrett and Morgan Deters. [http://link.springer.com/chapter/10.1007%2F978-3-319-08867-9_43 A DPLL(T) Theory Solver for a Theory of Strings and Regular Expressions].In Proceedings of the 26th International Conference on Computer Aided Verification (CAV'14), Vienna, Austria, 2014.&lt;br /&gt;
* Tianyi Liang. [http://ir.uiowa.edu/etd/1478/ Automated reasoning over string constraints]. PhD Dissertation, Department of Computer Science, The University of Iowa, Dec 2014.&lt;/div&gt;</summary>
		<author><name>Mattarei</name></author>	</entry>

	<entry>
		<id>http://cvc4.stanford.edu/w/index.php?title=How_do_I..._%3F&amp;diff=5515</id>
		<title>How do I... ?</title>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/w/index.php?title=How_do_I..._%3F&amp;diff=5515"/>
				<updated>2017-02-08T18:12:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mattarei: /* Dealing with the services on the CVC4 Stanford server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a repository for questions about working with CVC4.  If you have a question, please add it here.  If you have an answer, please add the answer to the [[Developer's Guide]], or another wiki page, and then link to it from here.&lt;br /&gt;
&lt;br /&gt;
=Dealing with ANTLR3=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#ANTLR3|...get ANTLR3 to work?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the build process=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Working with multiple, concurrent build profiles|...build a different CVC4 build profile than the &amp;quot;current&amp;quot; one?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with Subversion=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...check out CVC4 from the repository?]]&lt;br /&gt;
*[[Developer's Guide#Repository access from Eclipse|...access the repository from Eclipse?]]&lt;br /&gt;
*[[Developer's Guide#Browsing the repository|...browse CVC4 sources online?]]&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...update my working copy to the newest committed version?]]&lt;br /&gt;
*[[Developer's Guide#Working with files and directories|...rename a file or directory?]]&lt;br /&gt;
*[[Developer's Guide#Reverting a file in a working directory|...revert changes in my working directory?]]&lt;br /&gt;
*[[Developer's Guide#Reverting a commit|...revert changes that have already been committed to the repository?]]&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...see what I've changed in my working copy?]]&lt;br /&gt;
*[[Developer's Guide#Resolving conflicts in a working directory|...resolve a conflict?]]&lt;br /&gt;
*[[Developer's Guide#Creating a branch|...create a branch?]]&lt;br /&gt;
*[[Developer's Guide#Merging a branch back to the trunk|...merge a branch back into the trunk?]]&lt;br /&gt;
*[[Developer's Guide#Symbolically tagging a version|...symbolically tag a version?]]&lt;br /&gt;
*[[Developer's Guide#Marking a file as executable in Subversion|...make Subversion recognize that a file should be executable?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the source tree=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Adding a new Theory|...add support for a new theory to CVC4?]]&lt;br /&gt;
*[[Developer's Guide#Adding source directories|...add a new source directory to the tree?]]&lt;br /&gt;
*[[Developer's Guide#Adding source and header files|...add a new source file to the tree?]]&lt;br /&gt;
*[[Developer's Guide#Adding copyrighted sources|...add a new source file/directory to the tree from another project (under different copyright)?]]&lt;br /&gt;
*[[Developer's Guide#update-copyright.pl|...update the copyright information at the top of each file in the tree?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with tests=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Unit testing|...add a new unit test?]]&lt;br /&gt;
*[[Developer's Guide#System testing|...add a new system regression?]]&lt;br /&gt;
*[[Developer's Guide#Regression testing|...add a new regression?]]&lt;br /&gt;
*[[Developer's Guide#Debugging unit tests|...attach a debugger to unit tests?]]&lt;br /&gt;
*[[Developer's Guide#Test rebuilding|...avoid rebuilding all tests after trivial code changes to the library?]]&lt;br /&gt;
*[[Developer's Guide#Compile-time errors in unit tests|...deal with this strange compile error on my unit test?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with code coverage=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Visualizing code coverage|...visualize code coverage?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with performance=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Profiling|...profile CVC4?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the main CVC4 driver program=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Command-line options|...add a new command-line option?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with code reviews=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Code reviews|...perform a code review?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the services on the Church server=&lt;br /&gt;
&lt;br /&gt;
'''NOTE: This information is deprecated but we might want to review it.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--  *[[Using SSL with Church|...encrypt my communications with the Church web server?]] --&amp;gt;&lt;br /&gt;
&amp;lt;!--  *[[Newswire#Adding items to the newswire|...add an item to Church's CVC4 newswire?]] --&amp;gt;&lt;br /&gt;
*[[Developer Meeting Minutes#Adding meeting minutes to the wiki|...add CVC4 meeting minutes to the wiki?]]&lt;br /&gt;
*[[Developer Meeting Minutes#Adding electronic notes to meeting minutes|...add electronic notes to CVC4 meeting minutes?]]&lt;br /&gt;
*[[Running a CVC4 Meeting|...run a CVC4 meeting?]]&lt;br /&gt;
&lt;br /&gt;
= Dealing with adding a new theory =&lt;br /&gt;
For information on how to add a new theory see [[How to write a theory in CVC4]].&lt;/div&gt;</summary>
		<author><name>Mattarei</name></author>	</entry>

	<entry>
		<id>http://cvc4.stanford.edu/w/index.php?title=How_do_I..._%3F&amp;diff=5513</id>
		<title>How do I... ?</title>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/w/index.php?title=How_do_I..._%3F&amp;diff=5513"/>
				<updated>2017-02-03T05:47:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mattarei: /* Dealing with the services on the CVC4 Stanford server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a repository for questions about working with CVC4.  If you have a question, please add it here.  If you have an answer, please add the answer to the [[Developer's Guide]], or another wiki page, and then link to it from here.&lt;br /&gt;
&lt;br /&gt;
=Dealing with ANTLR3=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#ANTLR3|...get ANTLR3 to work?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the build process=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Working with multiple, concurrent build profiles|...build a different CVC4 build profile than the &amp;quot;current&amp;quot; one?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with Subversion=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...check out CVC4 from the repository?]]&lt;br /&gt;
*[[Developer's Guide#Repository access from Eclipse|...access the repository from Eclipse?]]&lt;br /&gt;
*[[Developer's Guide#Browsing the repository|...browse CVC4 sources online?]]&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...update my working copy to the newest committed version?]]&lt;br /&gt;
*[[Developer's Guide#Working with files and directories|...rename a file or directory?]]&lt;br /&gt;
*[[Developer's Guide#Reverting a file in a working directory|...revert changes in my working directory?]]&lt;br /&gt;
*[[Developer's Guide#Reverting a commit|...revert changes that have already been committed to the repository?]]&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...see what I've changed in my working copy?]]&lt;br /&gt;
*[[Developer's Guide#Resolving conflicts in a working directory|...resolve a conflict?]]&lt;br /&gt;
*[[Developer's Guide#Creating a branch|...create a branch?]]&lt;br /&gt;
*[[Developer's Guide#Merging a branch back to the trunk|...merge a branch back into the trunk?]]&lt;br /&gt;
*[[Developer's Guide#Symbolically tagging a version|...symbolically tag a version?]]&lt;br /&gt;
*[[Developer's Guide#Marking a file as executable in Subversion|...make Subversion recognize that a file should be executable?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the source tree=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Adding a new Theory|...add support for a new theory to CVC4?]]&lt;br /&gt;
*[[Developer's Guide#Adding source directories|...add a new source directory to the tree?]]&lt;br /&gt;
*[[Developer's Guide#Adding source and header files|...add a new source file to the tree?]]&lt;br /&gt;
*[[Developer's Guide#Adding copyrighted sources|...add a new source file/directory to the tree from another project (under different copyright)?]]&lt;br /&gt;
*[[Developer's Guide#update-copyright.pl|...update the copyright information at the top of each file in the tree?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with tests=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Unit testing|...add a new unit test?]]&lt;br /&gt;
*[[Developer's Guide#System testing|...add a new system regression?]]&lt;br /&gt;
*[[Developer's Guide#Regression testing|...add a new regression?]]&lt;br /&gt;
*[[Developer's Guide#Debugging unit tests|...attach a debugger to unit tests?]]&lt;br /&gt;
*[[Developer's Guide#Test rebuilding|...avoid rebuilding all tests after trivial code changes to the library?]]&lt;br /&gt;
*[[Developer's Guide#Compile-time errors in unit tests|...deal with this strange compile error on my unit test?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with code coverage=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Visualizing code coverage|...visualize code coverage?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with performance=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Profiling|...profile CVC4?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the main CVC4 driver program=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Command-line options|...add a new command-line option?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with code reviews=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Code reviews|...perform a code review?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the services on the CVC4 Stanford server=&lt;br /&gt;
&lt;br /&gt;
'''NOTE: This information is deprecated but we might want to review it.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--  *[[Using SSL with Church|...encrypt my communications with the Church web server?]] --&amp;gt;&lt;br /&gt;
&amp;lt;!--  *[[Newswire#Adding items to the newswire|...add an item to Church's CVC4 newswire?]] --&amp;gt;&lt;br /&gt;
*[[Developer Meeting Minutes#Adding meeting minutes to the wiki|...add CVC4 meeting minutes to the wiki?]]&lt;br /&gt;
*[[Developer Meeting Minutes#Adding electronic notes to meeting minutes|...add electronic notes to CVC4 meeting minutes?]]&lt;br /&gt;
*[[Running a CVC4 Meeting|...run a CVC4 meeting?]]&lt;br /&gt;
&lt;br /&gt;
= Dealing with adding a new theory =&lt;br /&gt;
For information on how to add a new theory see [[How to write a theory in CVC4]].&lt;/div&gt;</summary>
		<author><name>Mattarei</name></author>	</entry>

	<entry>
		<id>http://cvc4.stanford.edu/w/index.php?title=How_do_I..._%3F&amp;diff=5512</id>
		<title>How do I... ?</title>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/w/index.php?title=How_do_I..._%3F&amp;diff=5512"/>
				<updated>2017-02-03T05:44:58Z</updated>
		
		<summary type="html">&lt;p&gt;Mattarei: /* Dealing with the services on the Church server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a repository for questions about working with CVC4.  If you have a question, please add it here.  If you have an answer, please add the answer to the [[Developer's Guide]], or another wiki page, and then link to it from here.&lt;br /&gt;
&lt;br /&gt;
=Dealing with ANTLR3=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#ANTLR3|...get ANTLR3 to work?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the build process=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Working with multiple, concurrent build profiles|...build a different CVC4 build profile than the &amp;quot;current&amp;quot; one?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with Subversion=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...check out CVC4 from the repository?]]&lt;br /&gt;
*[[Developer's Guide#Repository access from Eclipse|...access the repository from Eclipse?]]&lt;br /&gt;
*[[Developer's Guide#Browsing the repository|...browse CVC4 sources online?]]&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...update my working copy to the newest committed version?]]&lt;br /&gt;
*[[Developer's Guide#Working with files and directories|...rename a file or directory?]]&lt;br /&gt;
*[[Developer's Guide#Reverting a file in a working directory|...revert changes in my working directory?]]&lt;br /&gt;
*[[Developer's Guide#Reverting a commit|...revert changes that have already been committed to the repository?]]&lt;br /&gt;
*[[Developer's Guide#Accessing CVC4's repository|...see what I've changed in my working copy?]]&lt;br /&gt;
*[[Developer's Guide#Resolving conflicts in a working directory|...resolve a conflict?]]&lt;br /&gt;
*[[Developer's Guide#Creating a branch|...create a branch?]]&lt;br /&gt;
*[[Developer's Guide#Merging a branch back to the trunk|...merge a branch back into the trunk?]]&lt;br /&gt;
*[[Developer's Guide#Symbolically tagging a version|...symbolically tag a version?]]&lt;br /&gt;
*[[Developer's Guide#Marking a file as executable in Subversion|...make Subversion recognize that a file should be executable?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the source tree=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Adding a new Theory|...add support for a new theory to CVC4?]]&lt;br /&gt;
*[[Developer's Guide#Adding source directories|...add a new source directory to the tree?]]&lt;br /&gt;
*[[Developer's Guide#Adding source and header files|...add a new source file to the tree?]]&lt;br /&gt;
*[[Developer's Guide#Adding copyrighted sources|...add a new source file/directory to the tree from another project (under different copyright)?]]&lt;br /&gt;
*[[Developer's Guide#update-copyright.pl|...update the copyright information at the top of each file in the tree?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with tests=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Unit testing|...add a new unit test?]]&lt;br /&gt;
*[[Developer's Guide#System testing|...add a new system regression?]]&lt;br /&gt;
*[[Developer's Guide#Regression testing|...add a new regression?]]&lt;br /&gt;
*[[Developer's Guide#Debugging unit tests|...attach a debugger to unit tests?]]&lt;br /&gt;
*[[Developer's Guide#Test rebuilding|...avoid rebuilding all tests after trivial code changes to the library?]]&lt;br /&gt;
*[[Developer's Guide#Compile-time errors in unit tests|...deal with this strange compile error on my unit test?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with code coverage=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Visualizing code coverage|...visualize code coverage?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with performance=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Profiling|...profile CVC4?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the main CVC4 driver program=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Command-line options|...add a new command-line option?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with code reviews=&lt;br /&gt;
&lt;br /&gt;
*[[Developer's Guide#Code reviews|...perform a code review?]]&lt;br /&gt;
&lt;br /&gt;
=Dealing with the services on the CVC4 Stanford server=&lt;br /&gt;
&lt;br /&gt;
'''NOTE: This information is deprecated but we might want to review it.'''&lt;br /&gt;
&lt;br /&gt;
(:*[[Using SSL with Church|...encrypt my communications with the Church web server?]]:)&lt;br /&gt;
(:*[[Newswire#Adding items to the newswire|...add an item to Church's CVC4 newswire?]]:)&lt;br /&gt;
*[[Developer Meeting Minutes#Adding meeting minutes to the wiki|...add CVC4 meeting minutes to the wiki?]]&lt;br /&gt;
*[[Developer Meeting Minutes#Adding electronic notes to meeting minutes|...add electronic notes to CVC4 meeting minutes?]]&lt;br /&gt;
*[[Running a CVC4 Meeting|...run a CVC4 meeting?]]&lt;br /&gt;
&lt;br /&gt;
= Dealing with adding a new theory =&lt;br /&gt;
For information on how to add a new theory see [[How to write a theory in CVC4]].&lt;/div&gt;</summary>
		<author><name>Mattarei</name></author>	</entry>

	</feed>