3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-03-17 02:30:01 +00:00

Add FiniteSet support to Go, OCaml, and JavaScript APIs

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2026-02-20 04:23:26 +00:00
parent 8f6afe3d64
commit 5d93f098fc
5 changed files with 320 additions and 3 deletions

View file

@ -1311,6 +1311,24 @@ struct
let mk_char_is_digit = Z3native.mk_char_is_digit
end
module FiniteSet =
struct
let mk_sort = Z3native.mk_finite_set_sort
let is_finite_set_sort = Z3native.is_finite_set_sort
let get_sort_basis = Z3native.get_finite_set_sort_basis
let mk_empty = Z3native.mk_finite_set_empty
let mk_singleton = Z3native.mk_finite_set_singleton
let mk_union = Z3native.mk_finite_set_union
let mk_intersect = Z3native.mk_finite_set_intersect
let mk_difference = Z3native.mk_finite_set_difference
let mk_member = Z3native.mk_finite_set_member
let mk_size = Z3native.mk_finite_set_size
let mk_subset = Z3native.mk_finite_set_subset
let mk_map = Z3native.mk_finite_set_map
let mk_filter = Z3native.mk_finite_set_filter
let mk_range = Z3native.mk_finite_set_range
end
module FloatingPoint =
struct
module RoundingMode =

View file

@ -2058,6 +2058,53 @@ sig
end
(** Finite Sets *)
module FiniteSet :
sig
(** Create a finite set sort with the given element sort. *)
val mk_sort : context -> Sort.sort -> Sort.sort
(** Test if a sort is a finite set sort. *)
val is_finite_set_sort : context -> Sort.sort -> bool
(** Get the element sort of a finite set sort. *)
val get_sort_basis : context -> Sort.sort -> Sort.sort
(** Create an empty finite set of the given sort. *)
val mk_empty : context -> Sort.sort -> Expr.expr
(** Create a singleton finite set containing the given element. *)
val mk_singleton : context -> Expr.expr -> Expr.expr
(** Create the union of two finite sets. *)
val mk_union : context -> Expr.expr -> Expr.expr -> Expr.expr
(** Create the intersection of two finite sets. *)
val mk_intersect : context -> Expr.expr -> Expr.expr -> Expr.expr
(** Create the set difference of two finite sets (s1 \ s2). *)
val mk_difference : context -> Expr.expr -> Expr.expr -> Expr.expr
(** Create a membership predicate: elem ∈ set. *)
val mk_member : context -> Expr.expr -> Expr.expr -> Expr.expr
(** Create an expression for the cardinality of a finite set. *)
val mk_size : context -> Expr.expr -> Expr.expr
(** Create a subset predicate: s1 ⊆ s2. *)
val mk_subset : context -> Expr.expr -> Expr.expr -> Expr.expr
(** Apply a function to all elements of a finite set. *)
val mk_map : context -> Expr.expr -> Expr.expr -> Expr.expr
(** Filter a finite set using a predicate function. *)
val mk_filter : context -> Expr.expr -> Expr.expr -> Expr.expr
(** Create a finite set of integers in the range [low, high]. *)
val mk_range : context -> Expr.expr -> Expr.expr -> Expr.expr
end
(** Floating-Point Arithmetic *)
module FloatingPoint :
sig