[API Coherence] Report for 2026-03-19 — Re-Verification Pass (All ~20 API Families) #9043
Closed
Replies: 1 comment
-
|
This discussion has been marked as outdated by API Coherence Checker. A newer discussion is available at Discussion #9060. |
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
This run performed a re-verification pass of all 16 open issues accumulated across 7 previous runs. No new C API additions were found since the last run (only one non-API bug-fix commit landed). All 16 issues remain unresolved.
Progress
High Priority Issues
1. User Propagator API Missing in TypeScript/JS
What: The entire
Z3_solver_propagate_*family (12 functions) is not exposed in TypeScript/JS.Available in: Python (
UserPropagatorBaseinz3.py), Java (UserPropagator.java), .NET (UserPropagator.cs), Go (propagator.go— full implementation withUserPropagatorstruct)Missing in: TypeScript/JS (
src/api/js/src/high-level/— noUserPropagatorclass), OCaml, RustFix: Add a
UserPropagatorclass tosrc/api/js/src/high-level/mirroring Python'sUserPropagatorBase. Bind via the existingZ3_solver_propagate_*C API bridge.Verified: 2026-03-19 —
grep -rn "UserPropagator" src/api/js/src/returns nothing.2. User Propagator API Missing in OCaml
What: None of the 12
Z3_solver_propagate_*functions have FFI bindings inz3native.ml.preor high-level wrappers inz3.ml.Available in: Python, Java, .NET, Go
Missing in: OCaml (
src/api/ml/z3native.ml.pre— 0 matches forZ3_solver_propagate)Fix: Add
external solver_propagate_init,external solver_propagate_fixed, etc. toz3native.ml.pre; add a high-levelUserPropagatormodule toz3.ml.Verified: 2026-03-19 —
grep -c "Z3_solver_propagate" src/api/ml/z3native.ml.prereturns 0.3. User Propagator API Missing in Rust
What: The
z3-syscrate has zero FFI bindings forZ3_solver_propagate_*, and the high-levelz3crate has noUserPropagatortype.Available in: Python, Java, .NET, Go
Missing in: Rust (
/tmp/z3.rs/z3-sys/src/lib.rs— 0 matches forZ3_solver_propagate)Fix: Add
Z3_solver_propagate_init,Z3_solver_propagate_fixed, etc. toz3-sys/src/lib.rs; add a high-levelUserPropagator<'ctx>wrapper inz3/src/. Note: requires the external repoprove-rs/z3.rs.Verified: 2026-03-19 —
grep -c "Z3_solver_propagate" /tmp/z3.rs/z3-sys/src/lib.rsreturns 0.4. OCaml
RCF.invBug — Callsrcf_negInstead ofrcf_invWhat:
src/api/ml/z3.mlline 2228 implementsinvby callingZ3native.rcf_neg(negation) instead ofZ3native.rcf_inv(multiplicative inverse). This is a copy-paste bug:invsilently returns the negation instead of the reciprocal.Fix: Change line 2228 to
Z3native.rcf_inv ctx a.Available correctly in: C API (
Z3_rcf_inv), Java, .NET, C++, TypeScriptVerified: 2026-03-19 —
grep -n "rcf_inv\|rcf_neg" src/api/ml/z3.mlconfirms the bug.Medium Priority Issues
5. Rust Missing Many Solver APIs
Missing from Rust
z3high-level crate (solver.rs):cube/Z3_solver_cubeget_trail/Z3_solver_get_trailsolve_for/Z3_solver_solve_forcongruence_*/Z3_solver_congruence_*set_initial_value/Z3_solver_set_initial_valueadd_simplifier/Z3_solver_add_simplifierregister_on_clause/Z3_solver_register_on_clauseto_dimacs_string/Z3_solver_to_dimacs_stringAvailable in: Python, Java, .NET, C++, OCaml, Go, TypeScript
Verified: 2026-03-19
6. Rust Missing Sequence/String Operations
Missing from Rust
z3/src/ast/(seq.rs / string-related files):extract(subsequence),replace,replace_all,replace_re,replace_re_all,is_prefix,is_suffix,index,last_index,map,mapi,foldl,foldliz3-syshas the corresponding FFI bindings; only the high-level wrappers are absent.Available in: Python, Java, .NET, C++, OCaml, Go, TypeScript
Verified: 2026-03-19
7. Rust Missing Algebraic Number Operations
Missing from Rust
z3high-levelAlgebraictype:le,ge(Z3_algebraic_le/gein z3-sys),neq(Z3_algebraic_neq),roots(Z3_algebraic_roots),eval(Z3_algebraic_eval). Alsoget_polyandget_iare absent from z3-sys entirely.Available in: Python (
AlgebraicNumRef), C++ (exprclass)Verified: 2026-03-19
8. Go Missing Global Parameter API
What:
Z3_global_param_set,Z3_global_param_get,Z3_global_param_reset_allare not wrapped in Go.Available in: Python (
set_param,get_param,reset_params), Java, .NET, TypeScript, OCaml, Rust (z3-sys)Missing in: Go (
src/api/go/z3.goand others — 0 matches)Fix: Add
SetGlobalParam(key, value string),GetGlobalParam(key string) (string, bool),ResetAllGlobalParams()tosrc/api/go/z3.go.Verified: 2026-03-19
9. Incremental Parser Context API Missing in Most Languages
What:
Z3_parser_context_new,Z3_parser_context_add_sort,Z3_parser_context_add_decl,Z3_parser_context_from_stringallow incremental SMT-LIB2 parsing with pre-declared sorts and functions.Available in: Python (
ParserContextclass inz3.py)Missing in: Java, .NET, Go, TypeScript, Rust, OCaml (none expose a high-level
ParserContext)Fix: Add
ParserContextclass/struct to each binding.Verified: 2026-03-19 —
grep -n "parser_context\|ParserContext" src/api/java/Context.javareturns nothing.10. Go Missing Standalone
ParseSmtlib2(Returns ASTVector)What: Go has
Solver.FromString(asserts directly) but lacks theZ3_parse_smtlib2_string/Z3_parse_smtlib2_fileAPI that returns anASTVectorof parsed assertions.Available in: Python (
parse_smt2_string), Java, .NET, TypeScript, OCaml, Rust z3-sysMissing in: Go (high-level), Rust high-level
Verified: 2026-03-19
11. Rust Fixedpoint Missing Several APIs
Missing from Rust
z3/src/fixedpoint.rs:get_rules/Z3_fixedpoint_get_rulesget_param_descrs/Z3_fixedpoint_get_param_descrsset_predicate_representation/Z3_fixedpoint_set_predicate_representationAvailable in: Python, Java, .NET, C++, OCaml, Go, TypeScript
Verified: 2026-03-19
12. Go Missing Entire RCF (Real Closed Field) API
What: None of the 37
Z3_rcf_*functions are wrapped in Go.Available in: C, Java, .NET, C++, OCaml (full), TypeScript (partial), Rust z3-sys (23/37 functions)
Missing in: Go (entirely), Python (uses
AlgebraicNumRefinstead), Rust high-level (entirely)Verified: 2026-03-19 — no
rcfreferences insrc/api/go/13. Rust z3-sys Missing 14 RCF Functions
Missing from
z3-sys/src/lib.rs(/tmp/z3.rs):Z3_rcf_is_rational,Z3_rcf_is_algebraic,Z3_rcf_is_infinitesimal,Z3_rcf_is_transcendental,Z3_rcf_extension_index,Z3_rcf_transcendental_name,Z3_rcf_infinitesimal_name,Z3_rcf_num_coefficients,Z3_rcf_coefficient,Z3_rcf_interval,Z3_rcf_num_sign_conditions,Z3_rcf_sign_condition_sign,Z3_rcf_num_sign_condition_coefficients,Z3_rcf_sign_condition_coefficientThe high-level
z3crate has zero RCF wrappers regardless.Available in: C (full), OCaml (full), Java/C#/TypeScript (partial)
Verified: 2026-03-19
Low Priority Issues
14. Advanced RCF Inspection APIs Missing in Java, .NET, C++, TypeScript
The following
Z3_rcf_*inspection/introspection functions are only fully wrapped in OCaml:extension_index,transcendental_name,infinitesimal_name,num_coefficients,coefficient,interval,num_sign_conditions,sign_condition_sign,num_sign_condition_coefficients,sign_condition_coefficientAvailable in: OCaml (
src/api/ml/z3.ml—RCFmodule)Missing in: Java, .NET, C++, TypeScript
Verified: 2026-03-19
15. Rust BV Missing
repeatOperationWhat:
Z3_mk_repeatis inz3-sys/src/lib.rsbutz3/src/ast/bv.rshas norepeatmethod.Available in: Python (
RepeatRef), C++ (z3++.h), Java, .NET, OCaml, TypeScript, GoMissing in: Rust high-level
Fix: Add
pub fn repeat(&self, i: u32) -> BV<'ctx>toz3/src/ast/bv.rs.Verified: 2026-03-19 —
grep -n "repeat" /tmp/z3.rs/z3/src/ast/*.rsreturns nothing.16. OCaml Algebraic Number API Very Limited
What: OCaml
Arithmetic.AlgebraicNumberonly exposesto_upper/to_lower(bound queries). All arithmetic (add,sub,mul,div,root,power) and comparison (lt,gt,le,ge,eq,neq,roots,eval) operations from the C API are absent.Available in: Python (
AlgebraicNumRef— full), Rust (Algebraic— partial), C++ (exprclass)Missing in: OCaml
Verified: 2026-03-19
17. Rust Tactic Missing Parallel Combinators
Missing from Rust
z3/src/tactic.rs:par_or(parallel OR),par_and_then(parallel AND-THEN),fail_if_not_decidedAvailable in: Python, Java, .NET, C++, OCaml, Go, TypeScript
Verified: 2026-03-19
Prioritized Action Items
RCF.invbug (1-line fix: changercf_neg→rcf_invinz3.ml:2228)repeatto Rust BVSetGlobalParam/GetGlobalParam/ResetAllGlobalParamsto GoParserContextto Java, .NET, Go, TypeScript, Rust, OCamlParseSmtlib2Stringreturning AST vector to Go and RustThe single highest-leverage fix is Issue #4 (OCaml
RCF.invbug) — it's a one-character change that fixes silent wrong results.Beta Was this translation helpful? Give feedback.
All reactions