cobra-mba 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. cobra_mba-0.4.0/CHANGELOG.md +175 -0
  2. cobra_mba-0.4.0/Cargo.lock +533 -0
  3. cobra_mba-0.4.0/Cargo.toml +123 -0
  4. cobra_mba-0.4.0/LICENSE +191 -0
  5. cobra_mba-0.4.0/PKG-INFO +189 -0
  6. cobra_mba-0.4.0/README.md +226 -0
  7. cobra_mba-0.4.0/cobra_mba/__init__.py +240 -0
  8. cobra_mba-0.4.0/cobra_mba/_native.pyi +363 -0
  9. cobra_mba-0.4.0/cobra_mba/py.typed +0 -0
  10. cobra_mba-0.4.0/crates/cobra/src/lib.rs +103 -0
  11. cobra_mba-0.4.0/crates/cobra-cli/src/main.rs +232 -0
  12. cobra_mba-0.4.0/crates/cobra-core/src/arith.rs +226 -0
  13. cobra_mba-0.4.0/crates/cobra-core/src/classification.rs +185 -0
  14. cobra_mba-0.4.0/crates/cobra-core/src/compiled.rs +495 -0
  15. cobra_mba-0.4.0/crates/cobra-core/src/evaluator.rs +406 -0
  16. cobra_mba-0.4.0/crates/cobra-core/src/expr.rs +486 -0
  17. cobra_mba-0.4.0/crates/cobra-core/src/expr_cost.rs +263 -0
  18. cobra_mba-0.4.0/crates/cobra-core/src/expr_rewrite.rs +593 -0
  19. cobra_mba-0.4.0/crates/cobra-core/src/expr_utils.rs +180 -0
  20. cobra_mba-0.4.0/crates/cobra-core/src/lib.rs +77 -0
  21. cobra_mba-0.4.0/crates/cobra-core/src/pass_contract.rs +387 -0
  22. cobra_mba-0.4.0/crates/cobra-core/src/profile.rs +65 -0
  23. cobra_mba-0.4.0/crates/cobra-core/src/result.rs +74 -0
  24. cobra_mba-0.4.0/crates/cobra-core/src/signature_eval.rs +208 -0
  25. cobra_mba-0.4.0/crates/cobra-core/src/signature_eval_stats.rs +40 -0
  26. cobra_mba-0.4.0/crates/cobra-core/src/signature_simplifier.rs +67 -0
  27. cobra_mba-0.4.0/crates/cobra-core/src/simplify_outcome.rs +177 -0
  28. cobra_mba-0.4.0/crates/cobra-core/src/spot_check.rs +849 -0
  29. cobra_mba-0.4.0/crates/cobra-core/src/trace.rs +41 -0
  30. cobra_mba-0.4.0/crates/cobra-core/src/width.rs +234 -0
  31. cobra_mba-0.4.0/crates/cobra-ir/src/anf_cleanup.rs +687 -0
  32. cobra_mba-0.4.0/crates/cobra-ir/src/anf_transform.rs +144 -0
  33. cobra_mba-0.4.0/crates/cobra-ir/src/arithmetic_lowering.rs +163 -0
  34. cobra_mba-0.4.0/crates/cobra-ir/src/basis_transform.rs +125 -0
  35. cobra_mba-0.4.0/crates/cobra-ir/src/coeff_interpolator.rs +158 -0
  36. cobra_mba-0.4.0/crates/cobra-ir/src/coefficient_splitter.rs +299 -0
  37. cobra_mba-0.4.0/crates/cobra-ir/src/dynamic_mask.rs +146 -0
  38. cobra_mba-0.4.0/crates/cobra-ir/src/lib.rs +78 -0
  39. cobra_mba-0.4.0/crates/cobra-ir/src/masked_atom_reconstructor.rs +204 -0
  40. cobra_mba-0.4.0/crates/cobra-ir/src/math_utils.rs +241 -0
  41. cobra_mba-0.4.0/crates/cobra-ir/src/mono.rs +209 -0
  42. cobra_mba-0.4.0/crates/cobra-ir/src/multivar_poly_recovery.rs +560 -0
  43. cobra_mba-0.4.0/crates/cobra-ir/src/null_poly_generator.rs +232 -0
  44. cobra_mba-0.4.0/crates/cobra-ir/src/packed_anf.rs +161 -0
  45. cobra_mba-0.4.0/crates/cobra-ir/src/poly.rs +170 -0
  46. cobra_mba-0.4.0/crates/cobra-ir/src/poly_expr_builder.rs +174 -0
  47. cobra_mba-0.4.0/crates/cobra-ir/src/poly_normalizer.rs +73 -0
  48. cobra_mba-0.4.0/crates/cobra-ir/src/semilinear.rs +537 -0
  49. cobra_mba-0.4.0/crates/cobra-ir/src/semilinear_normalizer.rs +561 -0
  50. cobra_mba-0.4.0/crates/cobra-ir/src/semilinear_signature.rs +299 -0
  51. cobra_mba-0.4.0/crates/cobra-ir/src/singleton_power.rs +112 -0
  52. cobra_mba-0.4.0/crates/cobra-ir/src/singleton_power_recovery.rs +203 -0
  53. cobra_mba-0.4.0/crates/cobra-ir/src/structure_recovery.rs +617 -0
  54. cobra_mba-0.4.0/crates/cobra-ir/src/term_refiner.rs +412 -0
  55. cobra_mba-0.4.0/crates/cobra-orchestrator/src/attempt_cache.rs +104 -0
  56. cobra_mba-0.4.0/crates/cobra-orchestrator/src/competition.rs +444 -0
  57. cobra_mba-0.4.0/crates/cobra-orchestrator/src/context.rs +197 -0
  58. cobra_mba-0.4.0/crates/cobra-orchestrator/src/continuation.rs +217 -0
  59. cobra_mba-0.4.0/crates/cobra-orchestrator/src/entry.rs +547 -0
  60. cobra_mba-0.4.0/crates/cobra-orchestrator/src/enums.rs +220 -0
  61. cobra_mba-0.4.0/crates/cobra-orchestrator/src/fingerprint.rs +423 -0
  62. cobra_mba-0.4.0/crates/cobra-orchestrator/src/join.rs +256 -0
  63. cobra_mba-0.4.0/crates/cobra-orchestrator/src/lib.rs +78 -0
  64. cobra_mba-0.4.0/crates/cobra-orchestrator/src/main_loop.rs +756 -0
  65. cobra_mba-0.4.0/crates/cobra-orchestrator/src/ranker.rs +167 -0
  66. cobra_mba-0.4.0/crates/cobra-orchestrator/src/registry.rs +76 -0
  67. cobra_mba-0.4.0/crates/cobra-orchestrator/src/scheduler.rs +677 -0
  68. cobra_mba-0.4.0/crates/cobra-orchestrator/src/state.rs +272 -0
  69. cobra_mba-0.4.0/crates/cobra-orchestrator/src/stubs.rs +84 -0
  70. cobra_mba-0.4.0/crates/cobra-orchestrator/src/work_item.rs +280 -0
  71. cobra_mba-0.4.0/crates/cobra-orchestrator/src/worklist.rs +250 -0
  72. cobra_mba-0.4.0/crates/cobra-orchestrator/tests/main_loop.rs +567 -0
  73. cobra_mba-0.4.0/crates/cobra-parser/src/ast.rs +329 -0
  74. cobra_mba-0.4.0/crates/cobra-parser/src/eval.rs +338 -0
  75. cobra_mba-0.4.0/crates/cobra-parser/src/lib.rs +17 -0
  76. cobra_mba-0.4.0/crates/cobra-parser/src/postfix.rs +236 -0
  77. cobra_mba-0.4.0/crates/cobra-parser/src/token.rs +341 -0
  78. cobra_mba-0.4.0/crates/cobra-passes/src/atom_identity_rewrite.rs +809 -0
  79. cobra_mba-0.4.0/crates/cobra-passes/src/atom_simplifier.rs +674 -0
  80. cobra_mba-0.4.0/crates/cobra-passes/src/aux_var.rs +297 -0
  81. cobra_mba-0.4.0/crates/cobra-passes/src/bit_partitioner.rs +195 -0
  82. cobra_mba-0.4.0/crates/cobra-passes/src/bitwise_decomposer.rs +288 -0
  83. cobra_mba-0.4.0/crates/cobra-passes/src/build_signature_state.rs +303 -0
  84. cobra_mba-0.4.0/crates/cobra-passes/src/candidate_normalize.rs +187 -0
  85. cobra_mba-0.4.0/crates/cobra-passes/src/classifier.rs +346 -0
  86. cobra_mba-0.4.0/crates/cobra-passes/src/classify_ast.rs +112 -0
  87. cobra_mba-0.4.0/crates/cobra-passes/src/cob_expr_builder.rs +275 -0
  88. cobra_mba-0.4.0/crates/cobra-passes/src/decomposition_engine.rs +380 -0
  89. cobra_mba-0.4.0/crates/cobra-passes/src/decomposition_helpers.rs +266 -0
  90. cobra_mba-0.4.0/crates/cobra-passes/src/entry.rs +703 -0
  91. cobra_mba-0.4.0/crates/cobra-passes/src/extract_poly_core.rs +201 -0
  92. cobra_mba-0.4.0/crates/cobra-passes/src/extract_product_core.rs +199 -0
  93. cobra_mba-0.4.0/crates/cobra-passes/src/extract_template_core.rs +62 -0
  94. cobra_mba-0.4.0/crates/cobra-passes/src/ghost_basis.rs +113 -0
  95. cobra_mba-0.4.0/crates/cobra-passes/src/ghost_residual_solver.rs +372 -0
  96. cobra_mba-0.4.0/crates/cobra-passes/src/hybrid_decomposer.rs +112 -0
  97. cobra_mba-0.4.0/crates/cobra-passes/src/lib.rs +358 -0
  98. cobra_mba-0.4.0/crates/cobra-passes/src/lift_arithmetic_atoms.rs +232 -0
  99. cobra_mba-0.4.0/crates/cobra-passes/src/lift_repeated_subexpressions.rs +227 -0
  100. cobra_mba-0.4.0/crates/cobra-passes/src/lifting.rs +411 -0
  101. cobra_mba-0.4.0/crates/cobra-passes/src/lower_not_over_arith.rs +291 -0
  102. cobra_mba-0.4.0/crates/cobra-passes/src/mapped_evaluator.rs +82 -0
  103. cobra_mba-0.4.0/crates/cobra-passes/src/mixed_product_rewriter.rs +276 -0
  104. cobra_mba-0.4.0/crates/cobra-passes/src/not_over_arith.rs +163 -0
  105. cobra_mba-0.4.0/crates/cobra-passes/src/npn4_canonical.rs +1134 -0
  106. cobra_mba-0.4.0/crates/cobra-passes/src/npn4_table.rs +393262 -0
  107. cobra_mba-0.4.0/crates/cobra-passes/src/operand_simplify.rs +286 -0
  108. cobra_mba-0.4.0/crates/cobra-passes/src/pattern_matcher.rs +1989 -0
  109. cobra_mba-0.4.0/crates/cobra-passes/src/prepare_coeff_model.rs +226 -0
  110. cobra_mba-0.4.0/crates/cobra-passes/src/prepare_direct_remainder.rs +126 -0
  111. cobra_mba-0.4.0/crates/cobra-passes/src/prepare_lifted_outer_solve.rs +220 -0
  112. cobra_mba-0.4.0/crates/cobra-passes/src/prepare_remainder_from_core.rs +254 -0
  113. cobra_mba-0.4.0/crates/cobra-passes/src/product_identity_collapse.rs +372 -0
  114. cobra_mba-0.4.0/crates/cobra-passes/src/proof_coverage.rs +1363 -0
  115. cobra_mba-0.4.0/crates/cobra-passes/src/residual_common.rs +166 -0
  116. cobra_mba-0.4.0/crates/cobra-passes/src/residual_factored_ghost.rs +152 -0
  117. cobra_mba-0.4.0/crates/cobra-passes/src/residual_ghost.rs +110 -0
  118. cobra_mba-0.4.0/crates/cobra-passes/src/residual_poly_recovery.rs +112 -0
  119. cobra_mba-0.4.0/crates/cobra-passes/src/residual_supported.rs +234 -0
  120. cobra_mba-0.4.0/crates/cobra-passes/src/residual_template.rs +86 -0
  121. cobra_mba-0.4.0/crates/cobra-passes/src/resolve_competition.rs +1437 -0
  122. cobra_mba-0.4.0/crates/cobra-passes/src/seed.rs +305 -0
  123. cobra_mba-0.4.0/crates/cobra-passes/src/self_check.rs +145 -0
  124. cobra_mba-0.4.0/crates/cobra-passes/src/semilinear_check.rs +94 -0
  125. cobra_mba-0.4.0/crates/cobra-passes/src/semilinear_normalize.rs +152 -0
  126. cobra_mba-0.4.0/crates/cobra-passes/src/semilinear_reconstruct.rs +188 -0
  127. cobra_mba-0.4.0/crates/cobra-passes/src/semilinear_rewrite.rs +113 -0
  128. cobra_mba-0.4.0/crates/cobra-passes/src/signature_anf.rs +312 -0
  129. cobra_mba-0.4.0/crates/cobra-passes/src/signature_bitwise_decompose.rs +361 -0
  130. cobra_mba-0.4.0/crates/cobra-passes/src/signature_cob_candidate.rs +269 -0
  131. cobra_mba-0.4.0/crates/cobra-passes/src/signature_hybrid_decompose.rs +300 -0
  132. cobra_mba-0.4.0/crates/cobra-passes/src/signature_multivar_poly_recovery.rs +259 -0
  133. cobra_mba-0.4.0/crates/cobra-passes/src/signature_pattern_match.rs +278 -0
  134. cobra_mba-0.4.0/crates/cobra-passes/src/signature_singleton_poly_recovery.rs +465 -0
  135. cobra_mba-0.4.0/crates/cobra-passes/src/singleton_power_expr_builder.rs +175 -0
  136. cobra_mba-0.4.0/crates/cobra-passes/src/spot_check.rs +9 -0
  137. cobra_mba-0.4.0/crates/cobra-passes/src/template_decomposer.rs +1356 -0
  138. cobra_mba-0.4.0/crates/cobra-passes/src/verify_candidate.rs +332 -0
  139. cobra_mba-0.4.0/crates/cobra-passes/src/weighted_poly_fit.rs +598 -0
  140. cobra_mba-0.4.0/crates/cobra-passes/src/xor_lowering.rs +216 -0
  141. cobra_mba-0.4.0/crates/cobra-passes/tests/adversarial_corpus.rs +339 -0
  142. cobra_mba-0.4.0/crates/cobra-passes/tests/generated_lean_replay.rs +4950 -0
  143. cobra_mba-0.4.0/crates/cobra-passes/tests/pipeline.rs +373 -0
  144. cobra_mba-0.4.0/crates/cobra-passes/tests/upstream_simplifier.rs +813 -0
  145. cobra_mba-0.4.0/crates/cobra-simd/src/lib.rs +290 -0
  146. cobra_mba-0.4.0/crates/cobra-testkit/src/bin/allocprobe.rs +91 -0
  147. cobra_mba-0.4.0/crates/cobra-testkit/src/bin/sweep.rs +172 -0
  148. cobra_mba-0.4.0/crates/cobra-testkit/src/lib.rs +380 -0
  149. cobra_mba-0.4.0/crates/cobra-testkit/tests/batch_throughput.rs +74 -0
  150. cobra_mba-0.4.0/crates/cobra-testkit/tests/datasets.rs +102 -0
  151. cobra_mba-0.4.0/crates/cobra-testkit/tests/phasebench.rs +70 -0
  152. cobra_mba-0.4.0/crates/cobra-verify/src/lean_cert.rs +1742 -0
  153. cobra_mba-0.4.0/crates/cobra-verify/src/lean_emit.rs +943 -0
  154. cobra_mba-0.4.0/crates/cobra-verify/src/lean_match.rs +316 -0
  155. cobra_mba-0.4.0/crates/cobra-verify/src/lib.rs +147 -0
  156. cobra_mba-0.4.0/crates/cobra-verify/src/null.rs +51 -0
  157. cobra_mba-0.4.0/crates/cobra-verify/src/z3_backend.rs +292 -0
  158. cobra_mba-0.4.0/pyproject.toml +62 -0
  159. cobra_mba-0.4.0/python/Cargo.lock +480 -0
  160. cobra_mba-0.4.0/python/Cargo.toml +30 -0
  161. cobra_mba-0.4.0/python/README.md +166 -0
  162. cobra_mba-0.4.0/python/examples/README.md +65 -0
  163. cobra_mba-0.4.0/python/examples/binaryninja_simplify.py +208 -0
  164. cobra_mba-0.4.0/python/examples/bulk_evaluate.py +110 -0
  165. cobra_mba-0.4.0/python/examples/idapython_simplify.py +214 -0
  166. cobra_mba-0.4.0/python/examples/simplify_corpus.py +138 -0
  167. cobra_mba-0.4.0/python/src/batch.rs +209 -0
  168. cobra_mba-0.4.0/python/src/enums.rs +340 -0
  169. cobra_mba-0.4.0/python/src/errors.rs +192 -0
  170. cobra_mba-0.4.0/python/src/expr.rs +1273 -0
  171. cobra_mba-0.4.0/python/src/flags.rs +83 -0
  172. cobra_mba-0.4.0/python/src/lib.rs +83 -0
  173. cobra_mba-0.4.0/python/src/options.rs +185 -0
  174. cobra_mba-0.4.0/python/src/outcome.rs +354 -0
  175. cobra_mba-0.4.0/python/src/worker.rs +54 -0
  176. cobra_mba-0.4.0/python/tests/conftest.py +121 -0
  177. cobra_mba-0.4.0/python/tests/test_batch.py +133 -0
  178. cobra_mba-0.4.0/python/tests/test_bulk_eval.py +148 -0
  179. cobra_mba-0.4.0/python/tests/test_cli_parity.py +58 -0
  180. cobra_mba-0.4.0/python/tests/test_datasets.py +139 -0
  181. cobra_mba-0.4.0/python/tests/test_errors.py +111 -0
  182. cobra_mba-0.4.0/python/tests/test_examples.py +116 -0
  183. cobra_mba-0.4.0/python/tests/test_expr.py +329 -0
  184. cobra_mba-0.4.0/python/tests/test_simplify.py +153 -0
  185. cobra_mba-0.4.0/python/tests/test_threads.py +84 -0
  186. cobra_mba-0.4.0/tools/parity/rust_main.rs +718 -0
@@ -0,0 +1,175 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.4.0] - 2026-09-02
11
+
12
+ ### Added
13
+
14
+ - Python bindings, in `python/`: a `cobra-mba` PyPI package built on PyO3 and
15
+ maturin, importable as `cobra_mba`. It exposes the parser, an immutable
16
+ `Expr` tree with Python operators, the simplifier, its options, and the full
17
+ diagnostic and telemetry bundle. Wheels target CPython 3.10 and newer through
18
+ the stable ABI, so one wheel per platform serves every supported interpreter.
19
+ The binding is a separate Cargo package with `publish = false`, so the
20
+ crates.io publish set is unchanged.
21
+ - `cobra_mba.simplify_many`: simplifies a batch on a pool of worker threads,
22
+ about four times faster than a Python loop on six cores. Results keep input
23
+ order, and `on_error="none"` leaves `None` in place of an item that failed to
24
+ parse rather than losing the batch.
25
+ - `Expr.evaluate_many`: evaluates one expression at many points in a single
26
+ call, 7x faster than a Python loop with list columns and 25x with bytes in
27
+ and out. Columns are sequences of integers or bytes holding little-endian
28
+ 64-bit values, which is the shape `numpy.ndarray.tobytes()` produces and
29
+ `numpy.frombuffer` reads back. There is no zero-copy buffer path because
30
+ Python only added the buffer protocol to its stable ABI in 3.11 and the
31
+ wheels target 3.10.
32
+ - Example scripts under `python/examples/`: a batch corpus sweep and a bulk
33
+ evaluation benchmark, both exercised by the test suite, plus IDAPython and
34
+ Binary Ninja templates that translate decompiler output into the
35
+ simplifier's syntax.
36
+ - `outcome_expr_in_original_space`: maps a finished `SimplifyOutcome`'s
37
+ expression back into the caller's variable namespace. A result that dropped
38
+ variables is indexed against `real_vars`, so rendering it against the
39
+ caller's table without this step prints the wrong names. `cobra-cli` and the
40
+ Python bindings now share this one helper, and a parity suite compares their
41
+ rendered output byte for byte.
42
+ - `tools/check_locks.py`, run in CI: the Python binding has its own
43
+ `Cargo.lock`, and this fails the build if any crate common to both locks
44
+ resolves to a different version. The exact `ahash` pin exists so fixed-seed
45
+ hashing matches across builds, and a binding that drifted from it would
46
+ produce different signatures from the same input.
47
+
48
+ ## [0.3.0] - 2026-08-24
49
+
50
+ ### Added
51
+
52
+ - Width-generic Lean theorem pack. Every rewrite the certificate machinery
53
+ recognizes now has a `_w` counterpart proved at an arbitrary `BitVec w`, so
54
+ certificates exist at every bitwidth in `1..=64`, not just 64. The bitwise
55
+ and ring identities are proved directly; the arithmetic MBA family
56
+ (`xor_eq_add_sub_two_mul_and` and relatives) is derived from a single carry
57
+ identity, `(a &&& b) + (a ||| b) = a + b`, proved by induction on binary
58
+ digits — no decision procedure, which is what makes it width-generic.
59
+ - Mixed-width Lean layer (`formal/lean/Cobra/Mixed.lean`): an `MExpr` model
60
+ mirroring the full expression `Kind` (casts and `Concat` included) with an
61
+ evaluator matching the compiled Rust evaluator arm for arm, width-generic
62
+ cast-rewrite theorems, and a context-congruence theorem. Certificates can
63
+ now be issued and replayed for cast-bearing (non-uniform-width) trees.
64
+ - A proved carry bridge (`ofExpr`, `evalW_ofExpr`, `semEqW_of_semEq`) embedding
65
+ the uniform `BitVec w` world into the mixed evaluator, so a mixed-chain step
66
+ on a cast-free redex cites the named uniform theorem rather than falling back
67
+ to a decision procedure.
68
+ - `try_compile` and `Evaluator::try_from_expr`: fallible compilation that
69
+ rejects trees whose node widths do not validate, instead of silently
70
+ producing a program that evaluates to zero everywhere.
71
+ - `Options::require_lean_certificate` (default `true`): when set, a
72
+ simplification is discarded unless a replayable certificate covers its exact
73
+ output. Turning it off accepts probe-only assurance and raises the
74
+ simplification rate on non-adversarial input.
75
+
76
+ ### Fixed
77
+
78
+ - Closed a soundness hole in the eval-side acceptance gate: probe derivation
79
+ now includes the original's constants and their pairwise products, catching
80
+ trap candidates that differ from the original only at an unprobed point, and
81
+ no longer truncates away high-magnitude probes.
82
+ - Corrected cast width validation and Z3 cast lowering (narrowing casts were
83
+ silently no-ops), unified three tree-walking evaluators onto the compiled
84
+ evaluator so casts use one width model, and replaced a degenerate `ValMap`
85
+ identity key that made the all-ones atom invisible.
86
+ - Balanced competition-handle accounting across clone, fan-out, and resolve;
87
+ revalidated stale mask pairings; made `AtomId` assignment deterministic;
88
+ stopped counting associative chains against the expression-depth budget (the
89
+ sole dataset error case now completes).
90
+ - Added absorption, complement, and constant-reassociation rewrites with their
91
+ Lean theorems, so `x & (x | y)`, `x & ~x`, `(a | b) & a` and similar simplify
92
+ with a replayable certificate.
93
+
94
+ ### Changed
95
+
96
+ - Certificate generation is no longer gated to 64-bit: multi-step certified
97
+ chains are produced at every width.
98
+ - The `require_lean_certificate` gate replaces the previous unconditional
99
+ discard of uncertified rewrites; see **Added**.
100
+
101
+ ### Performance
102
+
103
+ - Batch throughput for repeated `simplify_expr` calls improved ~25% on trivial
104
+ input via identity fast paths (equal-endpoint certificates, skipped probing
105
+ of unchanged candidates), a candidate-normalization memo, and per-bitwidth
106
+ caching of the singleton-recovery degree table.
107
+ - Cut redundant work in the pipeline: deferred phase-2 verification past its
108
+ loop nest, dropped a whole-tree replay re-scan, carried a width stack through
109
+ `compile`, capped the inner-composition table, and collapsed a redundant
110
+ interpolation-table dimension.
111
+
112
+
113
+ ## [0.2.0] - 2026-08-24
114
+
115
+ ### Fixed
116
+
117
+ - `full_width_check_eval` now derives its probe points from the original's
118
+ constants as well as the candidate's. It previously passed `None` for the
119
+ original, so a candidate differing from the original only at a constant that
120
+ appears solely in the original was accepted. Three rewrite sites use this
121
+ check as their only acceptance gate. The original's constants are recovered
122
+ from its compiled program via the new
123
+ `Evaluator::collect_constants_and_shifts`.
124
+
125
+ ### Changed
126
+
127
+ - `clap` is now an optional dependency behind the new `cli` feature, which is
128
+ off by default. The library's default dependency graph no longer contains
129
+ `clap`, `clap_derive`, or their transitive crates.
130
+ - The `cobra-cli` and `cobra-sweep` binaries declare
131
+ `required-features = ["cli"]`. Building, testing, or installing them now needs
132
+ `--features cli`, for example
133
+ `cargo install cobra-mba --bin cobra-cli --features cli`.
134
+
135
+ ## [0.1.0] - 2026-07-19
136
+
137
+ ### Added
138
+
139
+ - Initial public `cobra-mba` library and `cobra-cli`/`cobra-sweep` binaries in
140
+ one Cargo package.
141
+ - Rust `rlib` and `dylib` outputs, selectable with `-C prefer-dynamic`.
142
+ - MBA parsing, simplification, diagnostics, and optional Z3 verification.
143
+ - Lean certificate generation, replay tests, and proof-coverage checks.
144
+ - In-process Rust/C++ semantic-parity and stage-timing harness with exhaustive
145
+ Boolean signatures, deterministic full-width probes, and reproducible
146
+ comparison manifests.
147
+ - C++ v1.3 compatibility and performance report with exact baselines,
148
+ validation policy, and explicit whole-product exclusions.
149
+
150
+ ### Changed
151
+
152
+ - Synchronized the targeted core simplifier changes from upstream C++ v1.3,
153
+ including inclusion-exclusion recovery, XOR self-cancellation,
154
+ target-derived template constants, the single-product guard, and the global
155
+ output-cost gate.
156
+ - Aligned polynomial and signature hot paths with v1.3: stronger modular-inverse
157
+ seeding, block Möbius interpolation, incremental grid reuse, and odd-factorial
158
+ precomputation.
159
+ - Made masked-atom reconstruction order deterministic across randomized map
160
+ layouts.
161
+ - Clarified the supported core-parity scope and the dynamic-linking and Z3 CLI
162
+ commands in the README.
163
+
164
+ ### Fixed
165
+
166
+ - Kept full-width-live variables during auxiliary-variable elimination by
167
+ aligning the deterministic 64-probe liveness check with upstream.
168
+ - Preserved the candidate signature and structured `CostRejected` diagnostic
169
+ when the global size guard declines a pathological expansion.
170
+
171
+ [Unreleased]: https://github.com/binsnake/cobra/compare/v0.4.0...HEAD
172
+ [0.4.0]: https://github.com/binsnake/cobra/compare/v0.3.0...v0.4.0
173
+ [0.3.0]: https://github.com/binsnake/cobra/compare/v0.2.0...v0.3.0
174
+ [0.2.0]: https://github.com/binsnake/cobra/compare/v0.1.0...v0.2.0
175
+ [0.1.0]: https://github.com/binsnake/cobra/releases/tag/v0.1.0
@@ -0,0 +1,533 @@
1
+ # This file is automatically @generated by Cargo.
2
+ # It is not intended for manual editing.
3
+ version = 4
4
+
5
+ [[package]]
6
+ name = "ahash"
7
+ version = "0.8.11"
8
+ source = "registry+https://github.com/rust-lang/crates.io-index"
9
+ checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
10
+ dependencies = [
11
+ "cfg-if",
12
+ "getrandom",
13
+ "once_cell",
14
+ "version_check",
15
+ "zerocopy",
16
+ ]
17
+
18
+ [[package]]
19
+ name = "aho-corasick"
20
+ version = "1.1.4"
21
+ source = "registry+https://github.com/rust-lang/crates.io-index"
22
+ checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
23
+ dependencies = [
24
+ "memchr",
25
+ ]
26
+
27
+ [[package]]
28
+ name = "allocator-api2"
29
+ version = "0.2.21"
30
+ source = "registry+https://github.com/rust-lang/crates.io-index"
31
+ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
32
+
33
+ [[package]]
34
+ name = "anstream"
35
+ version = "1.0.0"
36
+ source = "registry+https://github.com/rust-lang/crates.io-index"
37
+ checksum = "824a212faf96e9acacdbd09febd34438f8f711fb84e09a8916013cd7815ca28d"
38
+ dependencies = [
39
+ "anstyle",
40
+ "anstyle-parse",
41
+ "anstyle-query",
42
+ "anstyle-wincon",
43
+ "colorchoice",
44
+ "is_terminal_polyfill",
45
+ "utf8parse",
46
+ ]
47
+
48
+ [[package]]
49
+ name = "anstyle"
50
+ version = "1.0.14"
51
+ source = "registry+https://github.com/rust-lang/crates.io-index"
52
+ checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000"
53
+
54
+ [[package]]
55
+ name = "anstyle-parse"
56
+ version = "1.0.0"
57
+ source = "registry+https://github.com/rust-lang/crates.io-index"
58
+ checksum = "52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"
59
+ dependencies = [
60
+ "utf8parse",
61
+ ]
62
+
63
+ [[package]]
64
+ name = "anstyle-query"
65
+ version = "1.1.5"
66
+ source = "registry+https://github.com/rust-lang/crates.io-index"
67
+ checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
68
+ dependencies = [
69
+ "windows-sys",
70
+ ]
71
+
72
+ [[package]]
73
+ name = "anstyle-wincon"
74
+ version = "3.0.11"
75
+ source = "registry+https://github.com/rust-lang/crates.io-index"
76
+ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
77
+ dependencies = [
78
+ "anstyle",
79
+ "once_cell_polyfill",
80
+ "windows-sys",
81
+ ]
82
+
83
+ [[package]]
84
+ name = "bindgen"
85
+ version = "0.66.1"
86
+ source = "registry+https://github.com/rust-lang/crates.io-index"
87
+ checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7"
88
+ dependencies = [
89
+ "bitflags",
90
+ "cexpr",
91
+ "clang-sys",
92
+ "lazy_static",
93
+ "lazycell",
94
+ "peeking_take_while",
95
+ "proc-macro2",
96
+ "quote",
97
+ "regex",
98
+ "rustc-hash",
99
+ "shlex",
100
+ "syn",
101
+ ]
102
+
103
+ [[package]]
104
+ name = "bitflags"
105
+ version = "2.11.1"
106
+ source = "registry+https://github.com/rust-lang/crates.io-index"
107
+ checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3"
108
+
109
+ [[package]]
110
+ name = "bytemuck"
111
+ version = "1.25.0"
112
+ source = "registry+https://github.com/rust-lang/crates.io-index"
113
+ checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec"
114
+
115
+ [[package]]
116
+ name = "cexpr"
117
+ version = "0.6.0"
118
+ source = "registry+https://github.com/rust-lang/crates.io-index"
119
+ checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
120
+ dependencies = [
121
+ "nom",
122
+ ]
123
+
124
+ [[package]]
125
+ name = "cfg-if"
126
+ version = "1.0.4"
127
+ source = "registry+https://github.com/rust-lang/crates.io-index"
128
+ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
129
+
130
+ [[package]]
131
+ name = "clang-sys"
132
+ version = "1.8.1"
133
+ source = "registry+https://github.com/rust-lang/crates.io-index"
134
+ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
135
+ dependencies = [
136
+ "glob",
137
+ "libc",
138
+ "libloading",
139
+ ]
140
+
141
+ [[package]]
142
+ name = "clap"
143
+ version = "4.6.1"
144
+ source = "registry+https://github.com/rust-lang/crates.io-index"
145
+ checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
146
+ dependencies = [
147
+ "clap_builder",
148
+ "clap_derive",
149
+ ]
150
+
151
+ [[package]]
152
+ name = "clap_builder"
153
+ version = "4.6.0"
154
+ source = "registry+https://github.com/rust-lang/crates.io-index"
155
+ checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
156
+ dependencies = [
157
+ "anstream",
158
+ "anstyle",
159
+ "clap_lex",
160
+ "strsim",
161
+ ]
162
+
163
+ [[package]]
164
+ name = "clap_derive"
165
+ version = "4.6.1"
166
+ source = "registry+https://github.com/rust-lang/crates.io-index"
167
+ checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
168
+ dependencies = [
169
+ "heck",
170
+ "proc-macro2",
171
+ "quote",
172
+ "syn",
173
+ ]
174
+
175
+ [[package]]
176
+ name = "clap_lex"
177
+ version = "1.1.0"
178
+ source = "registry+https://github.com/rust-lang/crates.io-index"
179
+ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9"
180
+
181
+ [[package]]
182
+ name = "cobra-mba"
183
+ version = "0.4.0"
184
+ dependencies = [
185
+ "ahash",
186
+ "clap",
187
+ "hashbrown 0.14.5",
188
+ "indexmap",
189
+ "smallvec",
190
+ "thiserror",
191
+ "wide",
192
+ "z3",
193
+ ]
194
+
195
+ [[package]]
196
+ name = "colorchoice"
197
+ version = "1.0.5"
198
+ source = "registry+https://github.com/rust-lang/crates.io-index"
199
+ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
200
+
201
+ [[package]]
202
+ name = "equivalent"
203
+ version = "1.0.2"
204
+ source = "registry+https://github.com/rust-lang/crates.io-index"
205
+ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
206
+
207
+ [[package]]
208
+ name = "getrandom"
209
+ version = "0.2.17"
210
+ source = "registry+https://github.com/rust-lang/crates.io-index"
211
+ checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
212
+ dependencies = [
213
+ "cfg-if",
214
+ "libc",
215
+ "wasi",
216
+ ]
217
+
218
+ [[package]]
219
+ name = "glob"
220
+ version = "0.3.3"
221
+ source = "registry+https://github.com/rust-lang/crates.io-index"
222
+ checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
223
+
224
+ [[package]]
225
+ name = "hashbrown"
226
+ version = "0.14.5"
227
+ source = "registry+https://github.com/rust-lang/crates.io-index"
228
+ checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
229
+ dependencies = [
230
+ "ahash",
231
+ "allocator-api2",
232
+ ]
233
+
234
+ [[package]]
235
+ name = "hashbrown"
236
+ version = "0.17.0"
237
+ source = "registry+https://github.com/rust-lang/crates.io-index"
238
+ checksum = "4f467dd6dccf739c208452f8014c75c18bb8301b050ad1cfb27153803edb0f51"
239
+
240
+ [[package]]
241
+ name = "heck"
242
+ version = "0.5.0"
243
+ source = "registry+https://github.com/rust-lang/crates.io-index"
244
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
245
+
246
+ [[package]]
247
+ name = "indexmap"
248
+ version = "2.14.0"
249
+ source = "registry+https://github.com/rust-lang/crates.io-index"
250
+ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9"
251
+ dependencies = [
252
+ "equivalent",
253
+ "hashbrown 0.17.0",
254
+ ]
255
+
256
+ [[package]]
257
+ name = "is_terminal_polyfill"
258
+ version = "1.70.2"
259
+ source = "registry+https://github.com/rust-lang/crates.io-index"
260
+ checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
261
+
262
+ [[package]]
263
+ name = "lazy_static"
264
+ version = "1.5.0"
265
+ source = "registry+https://github.com/rust-lang/crates.io-index"
266
+ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
267
+
268
+ [[package]]
269
+ name = "lazycell"
270
+ version = "1.3.0"
271
+ source = "registry+https://github.com/rust-lang/crates.io-index"
272
+ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
273
+
274
+ [[package]]
275
+ name = "libc"
276
+ version = "0.2.185"
277
+ source = "registry+https://github.com/rust-lang/crates.io-index"
278
+ checksum = "52ff2c0fe9bc6cb6b14a0592c2ff4fa9ceb83eea9db979b0487cd054946a2b8f"
279
+
280
+ [[package]]
281
+ name = "libloading"
282
+ version = "0.8.9"
283
+ source = "registry+https://github.com/rust-lang/crates.io-index"
284
+ checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
285
+ dependencies = [
286
+ "cfg-if",
287
+ "windows-link",
288
+ ]
289
+
290
+ [[package]]
291
+ name = "log"
292
+ version = "0.4.29"
293
+ source = "registry+https://github.com/rust-lang/crates.io-index"
294
+ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
295
+
296
+ [[package]]
297
+ name = "memchr"
298
+ version = "2.8.0"
299
+ source = "registry+https://github.com/rust-lang/crates.io-index"
300
+ checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
301
+
302
+ [[package]]
303
+ name = "minimal-lexical"
304
+ version = "0.2.1"
305
+ source = "registry+https://github.com/rust-lang/crates.io-index"
306
+ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
307
+
308
+ [[package]]
309
+ name = "nom"
310
+ version = "7.1.3"
311
+ source = "registry+https://github.com/rust-lang/crates.io-index"
312
+ checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
313
+ dependencies = [
314
+ "memchr",
315
+ "minimal-lexical",
316
+ ]
317
+
318
+ [[package]]
319
+ name = "once_cell"
320
+ version = "1.21.4"
321
+ source = "registry+https://github.com/rust-lang/crates.io-index"
322
+ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
323
+
324
+ [[package]]
325
+ name = "once_cell_polyfill"
326
+ version = "1.70.2"
327
+ source = "registry+https://github.com/rust-lang/crates.io-index"
328
+ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
329
+
330
+ [[package]]
331
+ name = "peeking_take_while"
332
+ version = "0.1.2"
333
+ source = "registry+https://github.com/rust-lang/crates.io-index"
334
+ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
335
+
336
+ [[package]]
337
+ name = "proc-macro2"
338
+ version = "1.0.106"
339
+ source = "registry+https://github.com/rust-lang/crates.io-index"
340
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
341
+ dependencies = [
342
+ "unicode-ident",
343
+ ]
344
+
345
+ [[package]]
346
+ name = "quote"
347
+ version = "1.0.45"
348
+ source = "registry+https://github.com/rust-lang/crates.io-index"
349
+ checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
350
+ dependencies = [
351
+ "proc-macro2",
352
+ ]
353
+
354
+ [[package]]
355
+ name = "regex"
356
+ version = "1.12.3"
357
+ source = "registry+https://github.com/rust-lang/crates.io-index"
358
+ checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
359
+ dependencies = [
360
+ "aho-corasick",
361
+ "memchr",
362
+ "regex-automata",
363
+ "regex-syntax",
364
+ ]
365
+
366
+ [[package]]
367
+ name = "regex-automata"
368
+ version = "0.4.14"
369
+ source = "registry+https://github.com/rust-lang/crates.io-index"
370
+ checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
371
+ dependencies = [
372
+ "aho-corasick",
373
+ "memchr",
374
+ "regex-syntax",
375
+ ]
376
+
377
+ [[package]]
378
+ name = "regex-syntax"
379
+ version = "0.8.10"
380
+ source = "registry+https://github.com/rust-lang/crates.io-index"
381
+ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
382
+
383
+ [[package]]
384
+ name = "rustc-hash"
385
+ version = "1.1.0"
386
+ source = "registry+https://github.com/rust-lang/crates.io-index"
387
+ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
388
+
389
+ [[package]]
390
+ name = "safe_arch"
391
+ version = "0.7.4"
392
+ source = "registry+https://github.com/rust-lang/crates.io-index"
393
+ checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
394
+ dependencies = [
395
+ "bytemuck",
396
+ ]
397
+
398
+ [[package]]
399
+ name = "shlex"
400
+ version = "1.3.0"
401
+ source = "registry+https://github.com/rust-lang/crates.io-index"
402
+ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
403
+
404
+ [[package]]
405
+ name = "smallvec"
406
+ version = "1.15.1"
407
+ source = "registry+https://github.com/rust-lang/crates.io-index"
408
+ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
409
+
410
+ [[package]]
411
+ name = "strsim"
412
+ version = "0.11.1"
413
+ source = "registry+https://github.com/rust-lang/crates.io-index"
414
+ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
415
+
416
+ [[package]]
417
+ name = "syn"
418
+ version = "2.0.117"
419
+ source = "registry+https://github.com/rust-lang/crates.io-index"
420
+ checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
421
+ dependencies = [
422
+ "proc-macro2",
423
+ "quote",
424
+ "unicode-ident",
425
+ ]
426
+
427
+ [[package]]
428
+ name = "thiserror"
429
+ version = "1.0.69"
430
+ source = "registry+https://github.com/rust-lang/crates.io-index"
431
+ checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
432
+ dependencies = [
433
+ "thiserror-impl",
434
+ ]
435
+
436
+ [[package]]
437
+ name = "thiserror-impl"
438
+ version = "1.0.69"
439
+ source = "registry+https://github.com/rust-lang/crates.io-index"
440
+ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
441
+ dependencies = [
442
+ "proc-macro2",
443
+ "quote",
444
+ "syn",
445
+ ]
446
+
447
+ [[package]]
448
+ name = "unicode-ident"
449
+ version = "1.0.24"
450
+ source = "registry+https://github.com/rust-lang/crates.io-index"
451
+ checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
452
+
453
+ [[package]]
454
+ name = "utf8parse"
455
+ version = "0.2.2"
456
+ source = "registry+https://github.com/rust-lang/crates.io-index"
457
+ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
458
+
459
+ [[package]]
460
+ name = "version_check"
461
+ version = "0.9.5"
462
+ source = "registry+https://github.com/rust-lang/crates.io-index"
463
+ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
464
+
465
+ [[package]]
466
+ name = "wasi"
467
+ version = "0.11.1+wasi-snapshot-preview1"
468
+ source = "registry+https://github.com/rust-lang/crates.io-index"
469
+ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
470
+
471
+ [[package]]
472
+ name = "wide"
473
+ version = "0.7.33"
474
+ source = "registry+https://github.com/rust-lang/crates.io-index"
475
+ checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03"
476
+ dependencies = [
477
+ "bytemuck",
478
+ "safe_arch",
479
+ ]
480
+
481
+ [[package]]
482
+ name = "windows-link"
483
+ version = "0.2.1"
484
+ source = "registry+https://github.com/rust-lang/crates.io-index"
485
+ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
486
+
487
+ [[package]]
488
+ name = "windows-sys"
489
+ version = "0.61.2"
490
+ source = "registry+https://github.com/rust-lang/crates.io-index"
491
+ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
492
+ dependencies = [
493
+ "windows-link",
494
+ ]
495
+
496
+ [[package]]
497
+ name = "z3"
498
+ version = "0.12.1"
499
+ source = "registry+https://github.com/rust-lang/crates.io-index"
500
+ checksum = "4a7ff5718c079e7b813378d67a5bed32ccc2086f151d6185074a7e24f4a565e8"
501
+ dependencies = [
502
+ "log",
503
+ "z3-sys",
504
+ ]
505
+
506
+ [[package]]
507
+ name = "z3-sys"
508
+ version = "0.8.1"
509
+ source = "registry+https://github.com/rust-lang/crates.io-index"
510
+ checksum = "d7cf70fdbc0de3f42b404f49b0d4686a82562254ea29ff0a155eef2f5430f4b0"
511
+ dependencies = [
512
+ "bindgen",
513
+ ]
514
+
515
+ [[package]]
516
+ name = "zerocopy"
517
+ version = "0.7.35"
518
+ source = "registry+https://github.com/rust-lang/crates.io-index"
519
+ checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
520
+ dependencies = [
521
+ "zerocopy-derive",
522
+ ]
523
+
524
+ [[package]]
525
+ name = "zerocopy-derive"
526
+ version = "0.7.35"
527
+ source = "registry+https://github.com/rust-lang/crates.io-index"
528
+ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
529
+ dependencies = [
530
+ "proc-macro2",
531
+ "quote",
532
+ "syn",
533
+ ]