[API Coherence] Report for 2026-07-05 – Full API Surface Re-verification #10045
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by API Coherence Checker. A newer discussion is available at Discussion #10055. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Summary
Re-verification pass of all 14 previously cached issues against the current codebase. No new API families analyzed (cumulative coverage: ~100% of known C API surface).
Resolution Updates
re_power—prove-rs/z3.rsz3/src/ast/regexp.rs:82now hasre_power(). Rust removed from that issue's "Missing in" list. C++, Python, .NET, OCaml still affected.High Priority
1. Rust missing Simplifier API
z3-syshasZ3_mk_simplifier,Z3_solver_add_simplifier, etc., but the high-levelz3crate has noSimplifiertype orSolver::add_simplifier().Missing in: Rust. Fix: Add
Simplifier<'ctx>wrapper andSolver::add_simplifier()inprove-rs/z3.rs.2. Rust missing FiniteSet API (even in z3-sys)
z3-syshas noZ3_mk_finite_set_*bindings at all. The C API exposes 9 finite-set functions.Missing in: Rust (both
z3-sysand high-levelz3crate). Fix: Add FFI declarations toz3-sys/src/generated/functions.rs, then high-level wrappers.3. Rust missing polymorphic datatype support
z3-syshasZ3_mk_polymorphic_datatypeandZ3_mk_type_variablebutDatatypeBuilderhas no polymorphic type mechanism.Missing in: Rust. Fix: Extend
z3/src/datatype_builder/mod.rswith type-variable support.Medium Priority
4. C++, Python, .NET, OCaml missing
re_power(Z3_mk_re_power)Creates a regex matching exactly n repetitions. Rust now has it; Java, TypeScript/JS, Go already had it.
Missing in: C++ (
z3++.h), Python (z3.py), .NET (Context.cs), OCaml (z3.ml).Fix: e.g. C++
re_power(expr const& re, unsigned n), PythonRePower(re, n), .NETMkRePower(ReExpr re, uint n).5. OCaml and Rust missing seq functional ops (seq_map, seq_mapi, seq_foldl, seq_foldli)
z3-sysexposes all four C bindings; high-levelz3crate'sSeqtype does not.Missing in: OCaml (
z3.ml), Rust (z3/src/ast/seq.rs).Fix: Add
mk_seq_map/mapi/foldl/foldlito OCaml; addmap/mapi/foldl/foldlimethods to RustSeq.6. OCaml and Go missing Polynomial Subresultants API
Z3_polynomial_subresultantsexposed in C, C++, Python, .NET, Java, TypeScript/JS, Rust but not OCaml or Go.Fix: Add wrappers to
src/api/ml/z3.mlandsrc/api/go/(newpolynomial.go).7. Go missing FreshConst / FreshFuncDecl
All other 7 languages provide fresh-name constant creation; Go does not.
Fix: Add
MkFreshConst/MkFreshFuncDecltosrc/api/go/expr.go.8. Go missing EnableTrace / DisableTrace
Go has
OpenLog/CloseLogbut notZ3_enable_trace/Z3_disable_tracewrappers.Fix: Add
EnableTrace(tag string)andDisableTrace(tag string)tosrc/api/go/log.go.9. Rust missing logging wrappers (enable_trace, disable_trace, open_log, close_log)
z3-sysexposes these but high-levelz3crate has no public wrappers.Fix: Add free functions in
z3/src/lib.rsor newz3/src/log.rsinprove-rs/z3.rs.10. C++, Python, Go, Rust missing simplifier enumeration API
Z3_get_num_simplifiers/Z3_get_simplifier_nameavailable in .NET and Java. Go hasGetSimplifierDescronly.Missing in: C++ (
z3++.h), Python (z3.py), Go (partial), Rust.Fix: Add
num_simplifiers()+simplifier_name(i)to each language.11. C++ and Rust missing
mk_type_variablez3-sysexposes the FFI; C++ has nocontext::type_variable()wrapper.Missing in: C++ (
z3++.h), Rust (high-levelz3crate).12. Optimize get_lower/upper_as_vector missing in TypeScript/JS, C++, OCaml, Rust
These return an
(inf, value, eps)triple needed to correctly read strict-vs-non-strict bounds.Available in: Python, Java, .NET, Go. Missing in: TypeScript/JS, C++, OCaml, Rust.
Low Priority
13. C++ and .NET missing
allchar(Z3_mk_re_allchar)Regex matching any single char. Available in Python (
AllChar), Java, TypeScript/JS, OCaml, Go, Rust.Missing in: C++ (
z3++.h), .NET (Context.cs).14. .NET missing MkLinearOrder, MkPiecewiseLinearOrder, MkTreeOrder
.NET only exposes
MkPartialOrderandMkTransitiveClosureof the five special-relation functions.Missing in: .NET (
Context.csnear line 5168). Fix: Add the three missing methods.15. Go missing AST.Id() method
Go has
Hash()but notId()(wrappingZ3_get_ast_id).Missing in: Go (
src/api/go/z3.go). Fix: Addfunc (a *Ast) Id() uint { ... }.Issue Count by Language
Next Steps
Monitor
src/api/z3_api.hfor newly added C API functions andprove-rs/z3.rsfor Rust fixes to the open issues above.Beta Was this translation helpful? Give feedback.
All reactions