mirror of
https://github.com/Z3Prover/z3
synced 2026-02-22 08:17:37 +00:00
git bindings v1.0
This commit is contained in:
parent
adacc27644
commit
a03500a194
33 changed files with 5289 additions and 7 deletions
145
examples/go/README.md
Normal file
145
examples/go/README.md
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
# Z3 Go Examples
|
||||
|
||||
This directory contains examples demonstrating how to use the Z3 Go bindings.
|
||||
|
||||
## Examples
|
||||
|
||||
### basic_example.go
|
||||
|
||||
Demonstrates fundamental Z3 operations:
|
||||
- Creating contexts and solvers
|
||||
- Defining integer and boolean variables
|
||||
- Adding constraints
|
||||
- Checking satisfiability
|
||||
- Extracting models
|
||||
|
||||
## Building and Running
|
||||
|
||||
### Prerequisites
|
||||
|
||||
1. Build Z3 with Go bindings enabled
|
||||
2. Ensure Z3 library is in your library path
|
||||
3. Go 1.20 or later
|
||||
|
||||
### Linux/macOS
|
||||
|
||||
```bash
|
||||
# Build Z3 first
|
||||
cd ../..
|
||||
mkdir build && cd build
|
||||
cmake ..
|
||||
make -j$(nproc)
|
||||
|
||||
# Set up environment
|
||||
cd ../examples/go
|
||||
export LD_LIBRARY_PATH=../../build:$LD_LIBRARY_PATH
|
||||
export CGO_CFLAGS="-I../../src/api"
|
||||
export CGO_LDFLAGS="-L../../build -lz3"
|
||||
|
||||
# Run examples
|
||||
go run basic_example.go
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
```cmd
|
||||
REM Build Z3 first
|
||||
cd ..\..
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
cmake --build . --config Release
|
||||
|
||||
REM Set up environment
|
||||
cd ..\examples\go
|
||||
set PATH=..\..\build\Release;%PATH%
|
||||
set CGO_CFLAGS=-I..\..\src\api
|
||||
set CGO_LDFLAGS=-L..\..\build\Release -lz3
|
||||
|
||||
REM Run examples
|
||||
go run basic_example.go
|
||||
```
|
||||
|
||||
## Expected Output
|
||||
|
||||
When you run `basic_example.go`, you should see output similar to:
|
||||
|
||||
```
|
||||
Z3 Go Bindings - Basic Example
|
||||
================================
|
||||
|
||||
Example 1: Solving x > 0
|
||||
Satisfiable!
|
||||
Model: ...
|
||||
x = 1
|
||||
|
||||
Example 2: Solving x + y = 10 ∧ x - y = 2
|
||||
Satisfiable!
|
||||
x = 6
|
||||
y = 4
|
||||
|
||||
Example 3: Boolean satisfiability
|
||||
Satisfiable!
|
||||
p = false
|
||||
q = true
|
||||
|
||||
Example 4: Checking unsatisfiability
|
||||
Status: unsat
|
||||
The constraints are unsatisfiable (as expected)
|
||||
|
||||
All examples completed successfully!
|
||||
```
|
||||
|
||||
## Creating Your Own Examples
|
||||
|
||||
1. Import the Z3 package:
|
||||
```go
|
||||
import "github.com/Z3Prover/z3/src/api/go"
|
||||
```
|
||||
|
||||
2. Create a context:
|
||||
```go
|
||||
ctx := z3.NewContext()
|
||||
```
|
||||
|
||||
3. Create variables and constraints:
|
||||
```go
|
||||
x := ctx.MkIntConst("x")
|
||||
constraint := ctx.MkGt(x, ctx.MkInt(0, ctx.MkIntSort()))
|
||||
```
|
||||
|
||||
4. Solve:
|
||||
```go
|
||||
solver := ctx.NewSolver()
|
||||
solver.Assert(constraint)
|
||||
if solver.Check() == z3.Satisfiable {
|
||||
model := solver.Model()
|
||||
// Use model...
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "undefined reference to Z3_*" errors
|
||||
|
||||
Make sure:
|
||||
- Z3 is built and the library is in your library path
|
||||
- CGO_LDFLAGS includes the correct library path
|
||||
- On Windows, the DLL is in your PATH
|
||||
|
||||
### "cannot find package" errors
|
||||
|
||||
Make sure:
|
||||
- CGO_CFLAGS includes the Z3 API header directory
|
||||
- The go.mod file exists in src/api/go
|
||||
|
||||
### CGO compilation errors
|
||||
|
||||
Ensure:
|
||||
- CGO is enabled (set CGO_ENABLED=1 if needed)
|
||||
- You have a C compiler installed (gcc, clang, or MSVC)
|
||||
- The Z3 headers are accessible
|
||||
|
||||
## More Information
|
||||
|
||||
See the README.md in src/api/go for complete API documentation.
|
||||
Loading…
Add table
Add a link
Reference in a new issue