Z3
 
Loading...
Searching...
No Matches
set.go
Go to the documentation of this file.
1package z3
2
3/*
4#include "z3.h"
5*/
6import "C"
7
8// Regular (array-encoded) Set operations
9
10// MkSetSort creates a set sort with the given element sort.
11func (c *Context) MkSetSort(elemSort *Sort) *Sort {
12 return newSort(c, C.Z3_mk_set_sort(c.ptr, elemSort.ptr))
13}
14
15// MkEmptySet creates an empty set of the given element sort.
16func (c *Context) MkEmptySet(elemSort *Sort) *Expr {
17 return newExpr(c, C.Z3_mk_empty_set(c.ptr, elemSort.ptr))
18}
19
20// MkFullSet creates the full set (universe) of the given element sort.
21func (c *Context) MkFullSet(elemSort *Sort) *Expr {
22 return newExpr(c, C.Z3_mk_full_set(c.ptr, elemSort.ptr))
23}
24
25// MkSetAdd adds an element to a set.
26func (c *Context) MkSetAdd(set, elem *Expr) *Expr {
27 return newExpr(c, C.Z3_mk_set_add(c.ptr, set.ptr, elem.ptr))
28}
29
30// MkSetDel removes an element from a set.
31func (c *Context) MkSetDel(set, elem *Expr) *Expr {
32 return newExpr(c, C.Z3_mk_set_del(c.ptr, set.ptr, elem.ptr))
33}
34
35// MkSetUnion creates the union of two or more sets.
36func (c *Context) MkSetUnion(sets ...*Expr) *Expr {
37 if len(sets) == 0 {
38 return nil
39 }
40 cSets := make([]C.Z3_ast, len(sets))
41 for i, s := range sets {
42 cSets[i] = s.ptr
43 }
44 return newExpr(c, C.Z3_mk_set_union(c.ptr, C.uint(len(sets)), &cSets[0]))
45}
46
47// MkSetIntersect creates the intersection of two or more sets.
48func (c *Context) MkSetIntersect(sets ...*Expr) *Expr {
49 if len(sets) == 0 {
50 return nil
51 }
52 cSets := make([]C.Z3_ast, len(sets))
53 for i, s := range sets {
54 cSets[i] = s.ptr
55 }
56 return newExpr(c, C.Z3_mk_set_intersect(c.ptr, C.uint(len(sets)), &cSets[0]))
57}
58
59// MkSetDifference creates the set difference (set1 \ set2).
60func (c *Context) MkSetDifference(set1, set2 *Expr) *Expr {
61 return newExpr(c, C.Z3_mk_set_difference(c.ptr, set1.ptr, set2.ptr))
62}
63
64// MkSetComplement creates the complement of a set.
65func (c *Context) MkSetComplement(set *Expr) *Expr {
66 return newExpr(c, C.Z3_mk_set_complement(c.ptr, set.ptr))
67}
68
69// MkSetMember creates a membership predicate: elem ∈ set.
70func (c *Context) MkSetMember(elem, set *Expr) *Expr {
71 return newExpr(c, C.Z3_mk_set_member(c.ptr, elem.ptr, set.ptr))
72}
73
74// MkSetSubset creates a subset predicate: set1 ⊆ set2.
75func (c *Context) MkSetSubset(set1, set2 *Expr) *Expr {
76 return newExpr(c, C.Z3_mk_set_subset(c.ptr, set1.ptr, set2.ptr))
77}