Skip to content

Implementations & tools

These are the FZnSO projects we know of. Each one talks to the others only through the ABI, so any application below can load any solver library below.

Bindings present the ABI in the types and conventions of one language, so neither side writes ABI code by hand. They live in the FZnSO repository (MIT).

BindingApplicationsSolversReference
Rust crate fznso (rust/fznso)yesyesRust
C++17 headers fznso.hpp and fznso_export.hpp (cpp/)yesyesC++
Python package fznso (python/)yesnoPython
C header fznso_types.h (c/)yesyesABI types

Any other language with a C foreign-function interface can use the C header directly.

SolverParadigmRepositoryLicence
Gecodeconstraint programmingDekker1/gecode, branch feat/fznsoMIT, as Gecode
Huublazy clause generationDekker1/huub, branch feat/fznsoMPL-2.0, as Huub
HiGHSmixed-integer programmingDekker1/FZnSO-MIPMIT
Gurobimixed-integer programmingDekker1/FZnSO-MIPMIT; Gurobi itself needs a licence
Z3satisfiability modulo theoriesDekker1/FZnSO-Z3MIT

The HiGHS and Gurobi libraries share one translation into a linear model, but each declares the capabilities of its own solver. Installing solvers explains where to put a library so that applications find it.

ApplicationRepositoryLicence
MiniZinc, through a generic FZnSO driverDekker1/libminizinc, branch feat/fznsoMPL-2.0, as MiniZinc

The MiniZinc driver loads any FZnSO solver library by name and uses its capability declarations to decide which constraints stay native and which are decomposed.

These are in the FZnSO repository (MIT), under tools/.

ToolWhat it doesGuide
librecord (solver record)Sits in place of a solver, passes every call on, and writes a logRecording and replaying
fznso-replayReplays the application’s side of a log against a solverRecording and replaying
libreplay (solver replay)Replays the solver’s side of a log to an application, with no solverRecording and replaying
fznso-conformChecks a solver library’s declarations and answers against the registrytools/fznso-conform/README.md

If you build a binding, solver library, application, or tool for FZnSO, open a pull request that adds it to this page.