mirror of
https://github.com/Z3Prover/z3
synced 2026-02-17 06:11:44 +00:00
git bindings v1.0
This commit is contained in:
parent
e2486eff77
commit
66d0fb5477
33 changed files with 5289 additions and 7 deletions
98
examples/go/basic_example.go
Normal file
98
examples/go/basic_example.go
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/Z3Prover/z3/src/api/go"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create a new Z3 context
|
||||
ctx := z3.NewContext()
|
||||
fmt.Println("Z3 Go Bindings - Basic Example")
|
||||
fmt.Println("================================")
|
||||
|
||||
// Example 1: Simple integer constraint
|
||||
fmt.Println("\nExample 1: Solving x > 0")
|
||||
x := ctx.MkIntConst("x")
|
||||
zero := ctx.MkInt(0, ctx.MkIntSort())
|
||||
constraint := ctx.MkGt(x, zero)
|
||||
|
||||
solver := ctx.NewSolver()
|
||||
solver.Assert(constraint)
|
||||
|
||||
if solver.Check() == z3.Satisfiable {
|
||||
model := solver.Model()
|
||||
fmt.Println("Satisfiable!")
|
||||
fmt.Println("Model:", model.String())
|
||||
if val, ok := model.Eval(x, true); ok {
|
||||
fmt.Println("x =", val.String())
|
||||
}
|
||||
}
|
||||
|
||||
// Example 2: System of equations
|
||||
fmt.Println("\nExample 2: Solving x + y = 10 ∧ x - y = 2")
|
||||
solver.Reset()
|
||||
y := ctx.MkIntConst("y")
|
||||
ten := ctx.MkInt(10, ctx.MkIntSort())
|
||||
two := ctx.MkInt(2, ctx.MkIntSort())
|
||||
|
||||
eq1 := ctx.MkEq(ctx.MkAdd(x, y), ten)
|
||||
eq2 := ctx.MkEq(ctx.MkSub(x, y), two)
|
||||
|
||||
solver.Assert(eq1)
|
||||
solver.Assert(eq2)
|
||||
|
||||
if solver.Check() == z3.Satisfiable {
|
||||
model := solver.Model()
|
||||
fmt.Println("Satisfiable!")
|
||||
if xVal, ok := model.Eval(x, true); ok {
|
||||
fmt.Println("x =", xVal.String())
|
||||
}
|
||||
if yVal, ok := model.Eval(y, true); ok {
|
||||
fmt.Println("y =", yVal.String())
|
||||
}
|
||||
}
|
||||
|
||||
// Example 3: Boolean logic
|
||||
fmt.Println("\nExample 3: Boolean satisfiability")
|
||||
solver.Reset()
|
||||
p := ctx.MkBoolConst("p")
|
||||
q := ctx.MkBoolConst("q")
|
||||
|
||||
// (p ∨ q) ∧ (¬p ∨ ¬q)
|
||||
formula := ctx.MkAnd(
|
||||
ctx.MkOr(p, q),
|
||||
ctx.MkOr(ctx.MkNot(p), ctx.MkNot(q)),
|
||||
)
|
||||
|
||||
solver.Assert(formula)
|
||||
|
||||
if solver.Check() == z3.Satisfiable {
|
||||
model := solver.Model()
|
||||
fmt.Println("Satisfiable!")
|
||||
if pVal, ok := model.Eval(p, true); ok {
|
||||
fmt.Println("p =", pVal.String())
|
||||
}
|
||||
if qVal, ok := model.Eval(q, true); ok {
|
||||
fmt.Println("q =", qVal.String())
|
||||
}
|
||||
}
|
||||
|
||||
// Example 4: Unsatisfiable constraint
|
||||
fmt.Println("\nExample 4: Checking unsatisfiability")
|
||||
solver.Reset()
|
||||
a := ctx.MkIntConst("a")
|
||||
one := ctx.MkInt(1, ctx.MkIntSort())
|
||||
|
||||
// a > 0 ∧ a < 0 (unsatisfiable)
|
||||
solver.Assert(ctx.MkGt(a, zero))
|
||||
solver.Assert(ctx.MkLt(a, zero))
|
||||
|
||||
status := solver.Check()
|
||||
fmt.Println("Status:", status.String())
|
||||
if status == z3.Unsatisfiable {
|
||||
fmt.Println("The constraints are unsatisfiable (as expected)")
|
||||
}
|
||||
|
||||
fmt.Println("\nAll examples completed successfully!")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue