Z3
 
Loading...
Searching...
No Matches
simplifier.go
Go to the documentation of this file.
1package z3
2
3/*
4#include "z3.h"
5#include <stdlib.h>
6*/
7import "C"
8import (
9 "runtime"
10 "unsafe"
11)
12
13// Simplifier represents a Z3 simplifier for pre-processing solver assertions.
14type Simplifier struct {
15 ctx *Context
16 ptr C.Z3_simplifier
17}
18
19// newSimplifier creates a new Simplifier and manages its reference count.
20func newSimplifier(ctx *Context, ptr C.Z3_simplifier) *Simplifier {
21 s := &Simplifier{ctx: ctx, ptr: ptr}
22 C.Z3_simplifier_inc_ref(ctx.ptr, ptr)
23 runtime.SetFinalizer(s, func(simp *Simplifier) {
24 C.Z3_simplifier_dec_ref(simp.ctx.ptr, simp.ptr)
25 })
26 return s
27}
28
29// MkSimplifier creates a simplifier with the given name.
30func (c *Context) MkSimplifier(name string) *Simplifier {
31 cName := C.CString(name)
32 defer C.free(unsafe.Pointer(cName))
33 return newSimplifier(c, C.Z3_mk_simplifier(c.ptr, cName))
34}
35
36// AndThen creates a simplifier that applies s followed by s2.
37func (s *Simplifier) AndThen(s2 *Simplifier) *Simplifier {
38 return newSimplifier(s.ctx, C.Z3_simplifier_and_then(s.ctx.ptr, s.ptr, s2.ptr))
39}
40
41// UsingParams creates a simplifier that uses the given parameters.
42func (s *Simplifier) UsingParams(params *Params) *Simplifier {
43 return newSimplifier(s.ctx, C.Z3_simplifier_using_params(s.ctx.ptr, s.ptr, params.ptr))
44}
45
46// GetHelp returns help information for the simplifier.
47func (s *Simplifier) GetHelp() string {
48 return C.GoString(C.Z3_simplifier_get_help(s.ctx.ptr, s.ptr))
49}
50
51// GetParamDescrs returns parameter descriptions for the simplifier.
52func (s *Simplifier) GetParamDescrs() *ParamDescrs {
53 return newParamDescrs(s.ctx, C.Z3_simplifier_get_param_descrs(s.ctx.ptr, s.ptr))
54}
55
56// GetSimplifierDescr returns a description of the simplifier with the given name.
57func (c *Context) GetSimplifierDescr(name string) string {
58 cName := C.CString(name)
59 defer C.free(unsafe.Pointer(cName))
60 return C.GoString(C.Z3_simplifier_get_descr(c.ptr, cName))
61}