Difference between revisions of "Sets"

From CVC4
Jump to: navigation, search
(finite sets)
 
Line 79: Line 79:
 
| <code>em.mkExpr('''kind::INSERT''', c1, c2, c3, sgl4);</code>
 
| <code>em.mkExpr('''kind::INSERT''', c1, c2, c3, sgl4);</code>
 
|}
 
|}
 +
 +
Operator precedence for CVC language:
 +
<code><nowiki>&</nowiki></code>
 +
<code><nowiki>|</nowiki></code>
 +
<code><nowiki>–</nowiki></code>
 +
<code><nowiki>IS_IN</nowiki></code>
 +
<code><nowiki><=</nowiki></code>
 +
<code><nowiki>=</nowiki></code>. For example, <code>A - B | A & C <= D</code> is read as <code>( A - ( B | (A & C) ) ) <= D</code>.

Revision as of 11:15, 31 August 2014

As of July 2014 (CVC4 v1.4), we include support for theory of finite sets. The simplest way to get a sense of the syntax is to look at an example:


For reference, below is a short summary of the sorts, constants, functions and predicates.

CVC language SMTLIB language C++ API
Logic string Not needed append "FS" for finite sets append "FS" for finite sets
(set-logic QF_UFLIAFS) smt.setLogic("QF_UFLIAFS");
Sort SET OF <Element Sort> (Set <Element Sort>) CVC4::ExprManager::mkSetType(CVC4::Type elementType)
X: SET OF INT; (declare-fun X () (Set Int)) em.mkSetType( em.integerType() );
Union X | Y (union X Y) em.mkExpr(kind::UNION, X, Y);
Intersection X & Y (intersection X Y) em.mkExpr(kind::INTERSECTION, X, Y);
Set subtraction X Y (setminus X Y) em.mkExpr(kind::SETMINUS, X, Y);
Membership x IS_IN X (member x X) em.mkExpr(kind::MEMBER, x, X);
Subset X <= Y (subset X Y) em.mkExpr(kind::SUBSET, X, Y);
Empty set {} :: <Type Ascription> (as emptyset <Type Ascription>) CVC4::EmptySet(CVC4::SetType setType)
{} :: SET OF INT (as emptyset (Set Int)) em.mkConst(EmptySet(em.mkSetType(em.integerType())));
Singleton set {1} (singelton 1) em.mkExpr(kind::SINGLETON, oneExpr);
Insert/finite sets {1, 2, 3, 4} (insert 1 2 3 (singleton 4)) em.mkExpr(kind::INSERT, c1, c2, c3, sgl4);

Operator precedence for CVC language: & | IS_IN <= =. For example, A - B | A & C <= D is read as ( A - ( B | (A & C) ) ) <= D.