open Sexplib.Std type binding_expr = Var of string | Const of Drl.Ast.value (** reuse DRL value for literals *) [@@deriving sexp] type constraint_body = | MemberOf of {target: string; binding: (string * binding_expr) list} | Not of {body: constraint_body; universe: string} | And of constraint_body list | Or of constraint_body list | Exists of {variable: string; quantifier: string; body: constraint_body} | Forall of {variable: string; quantifier: string; body: constraint_body} [@@deriving sexp] type statement = | RegisterConstraint of {constraint_name: string; relation_name: string; body: constraint_body} [@@deriving sexp]