<?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=Arjunvish</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=Arjunvish"/>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/wiki/Special:Contributions/Arjunvish"/>
		<updated>2026-04-04T12:55:50Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>http://cvc4.stanford.edu/w/index.php?title=Sets&amp;diff=5687</id>
		<title>Sets</title>
		<link rel="alternate" type="text/html" href="http://cvc4.stanford.edu/w/index.php?title=Sets&amp;diff=5687"/>
				<updated>2017-12-10T02:03:30Z</updated>
		
		<summary type="html">&lt;p&gt;Arjunvish: /* Relations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;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:&lt;br /&gt;
* [https://github.com/CVC4/CVC4/blob/1.4/test/regress/regress0/sets/cvc-sample.cvc CVC language example]&lt;br /&gt;
* [https://github.com/CVC4/CVC4/blob/1.4/test/regress/regress0/sets/sets-sample.smt2 SMT language example]&lt;br /&gt;
*  API example: [[Tutorials#Sets|tutorial]], [https://github.com/CVC4/CVC4/blob/1.4/examples/api/sets.cpp source code]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For reference, below is a short summary of the sorts, constants, functions and predicates.&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;
| append &amp;quot;FS&amp;quot; for finite sets&lt;br /&gt;
| append &amp;quot;FS&amp;quot; for finite sets&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;(set-logic QF_UFLIA'''FS''')&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;smt.setLogic(&amp;quot;QF_UFLIA'''FS'''&amp;quot;);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Sort&lt;br /&gt;
| SET OF &amp;lt;Element Sort&amp;gt;&lt;br /&gt;
| (Set &amp;lt;Element Sort&amp;gt;) &lt;br /&gt;
| CVC4::ExprManager::mkSetType(CVC4::Type elementType)&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;X: '''SET OF INT''';&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;(declare-fun X () '''(Set Int)''')&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.'''mkSetType'''( em.integerType() );&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Union&lt;br /&gt;
| &amp;lt;code&amp;gt;X '''&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;''' Y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''union''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::UNION''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Intersection&lt;br /&gt;
| &amp;lt;code&amp;gt;X '''&amp;lt;nowiki&amp;gt;&amp;amp;&amp;lt;/nowiki&amp;gt;''' Y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''intersection''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::INTERSECTION''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Set subtraction&lt;br /&gt;
| &amp;lt;code&amp;gt;X '''&amp;lt;nowiki&amp;gt;–&amp;lt;/nowiki&amp;gt;''' Y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''setminus''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::SETMINUS''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Membership&lt;br /&gt;
| &amp;lt;code&amp;gt;x '''&amp;lt;nowiki&amp;gt;IS_IN&amp;lt;/nowiki&amp;gt;''' X&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''member''' x X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::MEMBER''', x, X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Subset&lt;br /&gt;
| &amp;lt;code&amp;gt;X '''&amp;lt;nowiki&amp;gt;&amp;lt;=&amp;lt;/nowiki&amp;gt;''' Y&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''subset''' X Y)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::SUBSET''', X, Y);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Empty set&lt;br /&gt;
| {} :: &amp;lt;Type Ascription&amp;gt;&lt;br /&gt;
| (as emptyset &amp;lt;Type Ascription&amp;gt;)&lt;br /&gt;
| CVC4::EmptySet(CVC4::SetType setType)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;'''{}''' :: SET OF INT&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;(as '''emptyset''' (Set Int))&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkConst('''EmptySet'''(em.mkSetType(em.integerType())));&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Singleton set&lt;br /&gt;
| &amp;lt;code&amp;gt;'''{1}'''&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''singleton''' 1)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::SINGLETON''', oneExpr);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Cardinality&lt;br /&gt;
| &amp;lt;code&amp;gt;'''&amp;lt;nowiki&amp;gt;CARD&amp;lt;/nowiki&amp;gt;'''( X )&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''card''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::CARD''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Insert/finite sets&lt;br /&gt;
| &amp;lt;code&amp;gt;'''{1, 2, 3, 4}'''&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''insert''' 1 2 3 (singleton 4))&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::INSERT''', c1, c2, c3, sgl4);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Complement&lt;br /&gt;
| &amp;lt;code&amp;gt;'''&amp;lt;nowiki&amp;gt;~&amp;lt;/nowiki&amp;gt;''' X&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;('''complement''' X)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkExpr('''kind::COMPLEMENT''', X);&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Universe set&lt;br /&gt;
| UNIVERSE :: &amp;lt;Type Ascription&amp;gt;&lt;br /&gt;
| (as univset &amp;lt;Type Ascription&amp;gt;)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;'''UNIVERSE''' :: SET OF INT&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;(as '''univset''' (Set Int))&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;em.mkNullaryOperator(em.mkSetType(em.integerType()),'''kind::UNIVERSE_SET''');&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Operator precedence for CVC language:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;–&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;IS_IN&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. For example, &amp;lt;code&amp;gt;A - B | A &amp;amp; C &amp;lt;= D&amp;lt;/code&amp;gt; is read as &amp;lt;code&amp;gt;( A - ( B | (A &amp;amp; C) ) ) &amp;lt;= D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Relations=&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;
| --&lt;br /&gt;
| --&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| --&lt;br /&gt;
| --&lt;br /&gt;
|-&lt;br /&gt;
| Sort&lt;br /&gt;
| SET OF [ElementSort_1, ..., ElementSort_n]&lt;br /&gt;
|  (Set (Tuple ElementSort_1, ..., ElementSort_n))&lt;br /&gt;
| --&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &amp;lt;code&amp;gt;X: '''SET OF [INT, INT]''';&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; (declare-fun X () (Set (Tuple Int Int))) &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; -- &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Transpose&lt;br /&gt;
| &amp;lt;code&amp;gt;'''&amp;lt;nowiki&amp;gt;TRANSPOSE&amp;lt;/nowiki&amp;gt;'''(X) &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; ('''transpose''' X) &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; -- &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Transitive Closure&lt;br /&gt;
| &amp;lt;code&amp;gt;'''&amp;lt;nowiki&amp;gt;TCLOSURE&amp;lt;/nowiki&amp;gt;'''(X) &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; ('''tclosure''' X) &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; -- &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Join&lt;br /&gt;
| &amp;lt;code&amp;gt; X '''&amp;lt;nowiki&amp;gt;JOIN&amp;lt;/nowiki&amp;gt;''' Y &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; ('''join''' X Y) &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; -- &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Product&lt;br /&gt;
| &amp;lt;code&amp;gt; X '''&amp;lt;nowiki&amp;gt;PRODUCT&amp;lt;/nowiki&amp;gt;''' Y &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; ('''product''' X Y) &amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt; -- &amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
Note: Currently, we only support encoding relational constraints in CVC4 native language. Support for SMT-LIB language is coming soon.&lt;/div&gt;</summary>
		<author><name>Arjunvish</name></author>	</entry>

	</feed>