Difference between revisions of "Strings"

From CVC4
Jump to: navigation, search
Line 6: Line 6:
  
 
==Options==
 
==Options==
To set string alphabet cardinality (256 by default):
+
To set up string alphabet cardinality (256 by default):
 
   (set-option :strings-alphabet-card n)
 
   (set-option :strings-alphabet-card n)
  
To use finite model finding:
+
To use finite model finding mode (false by default):
 
   (set-option :strings-fmf true)
 
   (set-option :strings-fmf true)
 +
 +
To set up depth of unrolling regular expression used by the theory of strings (10 by default):
 +
  (set-option :strings-regexp-depth 20)
 +
 +
To select the strategy of LB rule application: 0-lazy, 1-eager, 2-no (0 by default):
 +
  (set-option :strings-lb 1)
  
 
==Strings==
 
==Strings==
Line 34: Line 40:
  
 
Regular Expression Concatenation:
 
Regular Expression Concatenation:
 
 
   (re.++ r_1 r_2 ... r_n)
 
   (re.++ r_1 r_2 ... r_n)
 
 
where r_1, r_2, ..., r_n are regular expressions.
 
where r_1, r_2, ..., r_n are regular expressions.
  
 
Regular Expression Alternation:
 
Regular Expression Alternation:
 
 
   (re.or r_1 r_2 ... r_n)
 
   (re.or r_1 r_2 ... r_n)
 
 
where r_1, r_2, ..., r_n are regular expressions.
 
where r_1, r_2, ..., r_n are regular expressions.
  
 
Regular Expression Intersection:
 
Regular Expression Intersection:
 
 
   (re.itr r_1 r_2 ... r_n)
 
   (re.itr r_1 r_2 ... r_n)
 
 
where r_1, r_2, ..., r_n are regular expressions.
 
where r_1, r_2, ..., r_n are regular expressions.
  
 
Regular Expression Kleene-Star:
 
Regular Expression Kleene-Star:
 
 
   (re.* r)
 
   (re.* r)
 
 
where r is a regular expression.
 
where r is a regular expression.
  
 
Regular Expression Kleene-Cross:
 
Regular Expression Kleene-Cross:
 
 
   (re.+ r)
 
   (re.+ r)
 
 
where r is a regular expression.
 
where r is a regular expression.
  
 
Regular Expression Option:
 
Regular Expression Option:
 
 
   (re.opt r)
 
   (re.opt r)
 
 
where r is a regular expression.
 
where r is a regular expression.
  
 
Regular Expression Range:
 
Regular Expression Range:
 
 
   (re.range s t)
 
   (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.
  
where s, t are single characters in double quotes, e.g. ``a", ``b".
+
=Extension=
It returns a regular expression that contains any character between s and t.
+
  
  

Revision as of 19:49, 5 December 2013

This page is about strings in CVC4

Syntax

The Theory of Strings logic symbol:

 (set-logic QF_S)

Options

To set up string alphabet cardinality (256 by default):

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

To use finite model finding mode (false by default):

 (set-option :strings-fmf true)

To set up depth of unrolling regular expression used by the theory of strings (10 by default):

 (set-option :strings-regexp-depth 20)

To select the strategy of LB rule application: 0-lazy, 1-eager, 2-no (0 by default):

 (set-option :strings-lb 1)

Strings

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.

Regular Expression

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.

Extension

Example

x y != y x