Difference between revisions of "Strings"

From CVC4
Jump to: navigation, search
Line 9: Line 9:
  
 
   (set-option :strings-fmf true)
 
   (set-option :strings-fmf true)
 
The default value is false.
 
  
 
To use finite model finding:
 
To use finite model finding:
Line 22: Line 20:
  
 
String Concatenation:
 
String Concatenation:
\begin{lstlisting}[style=smtlib]
+
 
(str.++ s t)
+
  (str.++ s t)
\end{lstlisting}
+
 
where $s, t$ are string terms.
+
where s, t are string terms.
  
 
String Length:
 
String Length:
\begin{lstlisting}[style=smtlib]
+
 
(str.len s)
+
  (str.len s)
\end{lstlisting}
+
 
where $s$ is a string term.
+
where s is a string term.
  
 
Membership Constraint:
 
Membership Constraint:
\begin{lstlisting}[style=smtlib]
+
 
(str.in.re s r)
+
  (str.in.re s r)
\end{lstlisting}
+
 
where $s$ is a string term and $r$ is a regular expression.
+
where s is a string term and r is a regular expression.
  
 
String to Regular Expression Conversion:
 
String to Regular Expression Conversion:
\begin{lstlisting}[style=smtlib]
+
 
(str.to.re s)
+
  (str.to.re s)
\end{lstlisting}
+
 
where $s$ is a string term. The statement turns a regular expression that only contains a string $s$.
+
where s is a string term. The statement turns a regular expression that only contains a string s.
  
 
Regular Expression Concatenation:
 
Regular Expression Concatenation:
\begin{lstlisting}[style=smtlib]
+
 
(re.++ r_1 r_2 ... r_n)
+
  (re.++ r_1 r_2 ... r_n)
\end{lstlisting}
+
 
where $r_1, r_2, \cdots, r_n$ are regular expressions.
+
where r_1, r_2, ..., r_n are regular expressions.
  
 
Regular Expression Alternation:
 
Regular Expression Alternation:
\begin{lstlisting}[style=smtlib]
+
 
(re.or r_1 r_2 ... r_n)
+
  (re.or r_1 r_2 ... r_n)
\end{lstlisting}
+
 
where $r_1, r_2, \cdots, r_n$ are regular expressions.
+
where r_1, r_2, ..., r_n are regular expressions.
  
 
Regular Expression Intersection:
 
Regular Expression Intersection:
\begin{lstlisting}[style=smtlib]
+
 
(re.itr r_1 r_2 ... r_n)
+
  (re.itr r_1 r_2 ... r_n)
\end{lstlisting}
+
 
where $r_1, r_2, \cdots, r_n$ are regular expressions.
+
where r_1, r_2, ..., r_n are regular expressions.
  
 
Regular Expression Kleene-Star:
 
Regular Expression Kleene-Star:
\begin{lstlisting}[style=smtlib]
+
 
(re.* r)
+
  (re.* r)
\end{lstlisting}
+
 
where $r$ is a regular expression.
+
where r is a regular expression.
  
 
Regular Expression Kleene-Cross:
 
Regular Expression Kleene-Cross:
\begin{lstlisting}[style=smtlib]
+
 
(re.+ r)
+
  (re.+ r)
\end{lstlisting}
+
 
where $r$ is a regular expression.
+
where r is a regular expression.
  
 
Regular Expression Option:
 
Regular Expression Option:
\begin{lstlisting}[style=smtlib]
+
 
(re.opt r)
+
  (re.opt r)
\end{lstlisting}
+
 
where $r$ is a regular expression.
+
where r is a regular expression.
  
 
Regular Expression Range:
 
Regular Expression Range:
\begin{lstlisting}[style=smtlib]
+
 
(re.range s t)
+
  (re.range s t)
\end{lstlisting}
+
 
where $s, t$ are single characters in double quotes, e.g. ``a", ``b".
+
where s, t are single characters in double quotes, e.g. ``a", ``b".
It returns a regular expression that contains any character between $s$ and $t$.
+
It returns a regular expression that contains any character between s and t.
  
  
 
=Example=
 
=Example=

Revision as of 15:58, 5 December 2013

This page is about strings in CVC4

Syntax

The Theory of String logic symbol:

 (set-logic QF_S)

To set string alphabet cardinality:

 (set-option :strings-fmf true)

To use finite model finding:

 (set-option :str-alphabet-card n)

To define a string variable:

 (def-fun x  () String)


String Concatenation:

 (str.++ s t)

where s, t are string terms.

String Length:

 (str.len s)

where s is a string term.

Membership Constraint:

 (str.in.re s r)

where s is a string term and r is a regular expression.

String to Regular Expression Conversion:

 (str.to.re s)

where s is a string term. The statement turns a regular expression that only contains a string s.

Regular Expression Concatenation:

 (re.++ r_1 r_2 ... r_n)

where r_1, r_2, ..., r_n are regular expressions.

Regular Expression Alternation:

 (re.or r_1 r_2 ... r_n)

where r_1, r_2, ..., r_n are regular expressions.

Regular Expression Intersection:

 (re.itr r_1 r_2 ... r_n)

where r_1, r_2, ..., r_n are regular expressions.

Regular Expression Kleene-Star:

 (re.* r)

where r is a regular expression.

Regular Expression Kleene-Cross:

 (re.+ r)

where r is a regular expression.

Regular Expression Option:

 (re.opt r)

where r is a regular expression.

Regular Expression Range:

 (re.range s t)

where s, t are single characters in double quotes, e.g. ``a", ``b". It returns a regular expression that contains any character between s and t.


Example