synalog 2.3.0__tar.gz → 2.4.1__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 (199) hide show
  1. {synalog-2.3.0 → synalog-2.4.1}/Cargo.lock +2 -2
  2. {synalog-2.3.0 → synalog-2.4.1}/Cargo.toml +1 -1
  3. {synalog-2.3.0 → synalog-2.4.1}/PKG-INFO +7 -7
  4. {synalog-2.3.0 → synalog-2.4.1}/README.md +6 -6
  5. synalog-2.4.1/docs/benchmark/results.json +259239 -0
  6. synalog-2.4.1/docs/benchmark/speedup_by_engine.png +0 -0
  7. synalog-2.4.1/docs/benchmark/speedup_distribution.png +0 -0
  8. synalog-2.4.1/docs/benchmark/summary.md +18 -0
  9. synalog-2.4.1/docs/benchmark/summary.png +0 -0
  10. synalog-2.4.1/docs/benchmark/time_comparison.png +0 -0
  11. synalog-2.4.1/docs/benchmark/verify_by_engine.png +0 -0
  12. {synalog-2.3.0 → synalog-2.4.1}/pyproject.toml +1 -1
  13. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/functors.rs +3 -2
  14. {synalog-2.3.0 → synalog-2.4.1}/src/python.rs +120 -98
  15. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/arity.rs +83 -40
  16. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/safety.rs +128 -68
  17. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/stratification.rs +47 -0
  18. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/undefined.rs +73 -38
  19. {synalog-2.3.0 → synalog-2.4.1}/uv.lock +113 -113
  20. {synalog-2.3.0 → synalog-2.4.1}/verified/Cargo.toml +1 -1
  21. synalog-2.4.1/verified/src/arity.rs +73 -0
  22. {synalog-2.3.0 → synalog-2.4.1}/verified/src/lib.rs +54 -1
  23. synalog-2.4.1/verified/src/membership.rs +157 -0
  24. synalog-2.4.1/verified/src/recursion.rs +33 -0
  25. synalog-2.4.1/verified/src/safety.rs +158 -0
  26. synalog-2.4.1/verified/src/strata.rs +248 -0
  27. {synalog-2.3.0 → synalog-2.4.1}/verified/src/types.rs +190 -0
  28. synalog-2.3.0/docs/benchmark/results.json +0 -4575
  29. synalog-2.3.0/docs/benchmark/speedup_by_engine.png +0 -0
  30. synalog-2.3.0/docs/benchmark/speedup_distribution.png +0 -0
  31. synalog-2.3.0/docs/benchmark/summary.md +0 -18
  32. synalog-2.3.0/docs/benchmark/summary.png +0 -0
  33. synalog-2.3.0/docs/benchmark/time_comparison.png +0 -0
  34. synalog-2.3.0/docs/benchmark/verify_by_engine.png +0 -0
  35. {synalog-2.3.0 → synalog-2.4.1}/.gitignore +0 -0
  36. {synalog-2.3.0 → synalog-2.4.1}/LICENSE +0 -0
  37. {synalog-2.3.0 → synalog-2.4.1}/NOTICE +0 -0
  38. {synalog-2.3.0 → synalog-2.4.1}/docs/assertions.md +0 -0
  39. {synalog-2.3.0 → synalog-2.4.1}/docs/assets/synalog-dark.svg +0 -0
  40. {synalog-2.3.0 → synalog-2.4.1}/docs/assets/synalog-light.svg +0 -0
  41. {synalog-2.3.0 → synalog-2.4.1}/docs/assets/synalog_favicon.png +0 -0
  42. {synalog-2.3.0 → synalog-2.4.1}/docs/benchmark.md +0 -0
  43. {synalog-2.3.0 → synalog-2.4.1}/docs/cli.md +0 -0
  44. {synalog-2.3.0 → synalog-2.4.1}/docs/development.md +0 -0
  45. {synalog-2.3.0 → synalog-2.4.1}/docs/differences-datalog.md +0 -0
  46. {synalog-2.3.0 → synalog-2.4.1}/docs/differences.md +0 -0
  47. {synalog-2.3.0 → synalog-2.4.1}/docs/engines.md +0 -0
  48. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/aggregation.l +0 -0
  49. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/aggregation.log +0 -0
  50. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/directives.l +0 -0
  51. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/directives.log +0 -0
  52. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/functions.l +0 -0
  53. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/functions.log +0 -0
  54. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/functors.l +0 -0
  55. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/functors.log +0 -0
  56. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/getting_started.l +0 -0
  57. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/getting_started.log +0 -0
  58. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/knowledge_graphs.l +0 -0
  59. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/knowledge_graphs.log +0 -0
  60. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/recursion.l +0 -0
  61. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/recursion.log +0 -0
  62. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/run.py +0 -0
  63. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/concepts/customer.l +0 -0
  64. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/concepts/order_status.l +0 -0
  65. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/data/orders.csv +0 -0
  66. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/layer.toml +0 -0
  67. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/rules/customer_revenue.l +0 -0
  68. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/rules/orders_by_status.l +0 -0
  69. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/rules/top_customers.l +0 -0
  70. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop/tables/orders.l +0 -0
  71. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/shop.log +0 -0
  72. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke/concepts/device.l +0 -0
  73. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke/concepts/test_status.l +0 -0
  74. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke/data/smoke_tests.csv +0 -0
  75. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke/layer.toml +0 -0
  76. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke/rules/failures_by_device.l +0 -0
  77. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke/rules/runs_per_day.l +0 -0
  78. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke/tables/smoke_tests.l +0 -0
  79. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/smoke.log +0 -0
  80. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/syntax.l +0 -0
  81. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/syntax.log +0 -0
  82. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/temporal.l +0 -0
  83. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/temporal.log +0 -0
  84. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/temporal_graph.l +0 -0
  85. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/temporal_graph.log +0 -0
  86. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/verification.l +0 -0
  87. {synalog-2.3.0 → synalog-2.4.1}/docs/examples/verification.log +0 -0
  88. {synalog-2.3.0 → synalog-2.4.1}/docs/getting-started.md +0 -0
  89. {synalog-2.3.0 → synalog-2.4.1}/docs/index.md +0 -0
  90. {synalog-2.3.0 → synalog-2.4.1}/docs/javascripts/playground.js +0 -0
  91. {synalog-2.3.0 → synalog-2.4.1}/docs/javascripts/summarize.js +0 -0
  92. {synalog-2.3.0 → synalog-2.4.1}/docs/javascripts/synalog-highlight.js +0 -0
  93. {synalog-2.3.0 → synalog-2.4.1}/docs/knowledge-graphs.md +0 -0
  94. {synalog-2.3.0 → synalog-2.4.1}/docs/language/aggregation.md +0 -0
  95. {synalog-2.3.0 → synalog-2.4.1}/docs/language/directives.md +0 -0
  96. {synalog-2.3.0 → synalog-2.4.1}/docs/language/functions.md +0 -0
  97. {synalog-2.3.0 → synalog-2.4.1}/docs/language/functors.md +0 -0
  98. {synalog-2.3.0 → synalog-2.4.1}/docs/language/index.md +0 -0
  99. {synalog-2.3.0 → synalog-2.4.1}/docs/language/recursion.md +0 -0
  100. {synalog-2.3.0 → synalog-2.4.1}/docs/language/syntax.md +0 -0
  101. {synalog-2.3.0 → synalog-2.4.1}/docs/language/temporal.md +0 -0
  102. {synalog-2.3.0 → synalog-2.4.1}/docs/playground/vendor/codemirror.js +0 -0
  103. {synalog-2.3.0 → synalog-2.4.1}/docs/playground.md +0 -0
  104. {synalog-2.3.0 → synalog-2.4.1}/docs/python-api.md +0 -0
  105. {synalog-2.3.0 → synalog-2.4.1}/docs/stylesheets/extra.css +0 -0
  106. {synalog-2.3.0 → synalog-2.4.1}/docs/verification.md +0 -0
  107. {synalog-2.3.0 → synalog-2.4.1}/docs/why.md +0 -0
  108. {synalog-2.3.0 → synalog-2.4.1}/img/synalog-dark.svg +0 -0
  109. {synalog-2.3.0 → synalog-2.4.1}/img/synalog-light.svg +0 -0
  110. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/__init__.py +0 -0
  111. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/__main__.py +0 -0
  112. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/checking.py +0 -0
  113. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/cli.py +0 -0
  114. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/config.py +0 -0
  115. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/execution.py +0 -0
  116. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/introspect.py +0 -0
  117. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/project.py +0 -0
  118. {synalog-2.3.0 → synalog-2.4.1}/python/synalog/runners.py +0 -0
  119. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/SKILL.md +0 -0
  120. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/concepts/department.l +0 -0
  121. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/concepts/person.l +0 -0
  122. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/concepts/works_in.l +0 -0
  123. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/data/departments.csv +0 -0
  124. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/data/employees.csv +0 -0
  125. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/layer.toml +0 -0
  126. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/rules/team_mate.l +0 -0
  127. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/tables/departments.l +0 -0
  128. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/company/tables/employees.l +0 -0
  129. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/org/concepts/all_managers.l +0 -0
  130. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/org/data/employees.csv +0 -0
  131. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/org/layer.toml +0 -0
  132. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/org/tables/employees.l +0 -0
  133. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/sales/concepts/region.l +0 -0
  134. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/sales/data/sales.csv +0 -0
  135. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/sales/layer.toml +0 -0
  136. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/sales/rules/monthly_sales.l +0 -0
  137. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/sales/rules/top_region.l +0 -0
  138. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/sales/rules/total_by_region.l +0 -0
  139. {synalog-2.3.0 → synalog-2.4.1}/skills/synalog/examples/sales/tables/sales.l +0 -0
  140. {synalog-2.3.0 → synalog-2.4.1}/src/assertion/mod.rs +0 -0
  141. {synalog-2.3.0 → synalog-2.4.1}/src/assertion/parse.rs +0 -0
  142. {synalog-2.3.0 → synalog-2.4.1}/src/assertion/report.rs +0 -0
  143. {synalog-2.3.0 → synalog-2.4.1}/src/assertion/translate.rs +0 -0
  144. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/annotations.rs +0 -0
  145. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/annotations_test.rs +0 -0
  146. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/dialects.rs +0 -0
  147. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/dialects_test.rs +0 -0
  148. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/expr_translate.rs +0 -0
  149. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/expr_translate_test.rs +0 -0
  150. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/functors_test.rs +0 -0
  151. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/mod.rs +0 -0
  152. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/rule_translate.rs +0 -0
  153. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/rule_translate_test.rs +0 -0
  154. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/builder.rs +0 -0
  155. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/built_in.rs +0 -0
  156. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/edge.rs +0 -0
  157. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/expression.rs +0 -0
  158. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/graph.rs +0 -0
  159. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/inference.rs +0 -0
  160. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/intersection.rs +0 -0
  161. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/mod.rs +0 -0
  162. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/type_inference/types.rs +0 -0
  163. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/universe.rs +0 -0
  164. {synalog-2.3.0 → synalog-2.4.1}/src/compiler/universe_test.rs +0 -0
  165. {synalog-2.3.0 → synalog-2.4.1}/src/errors.rs +0 -0
  166. {synalog-2.3.0 → synalog-2.4.1}/src/lib.rs +0 -0
  167. {synalog-2.3.0 → synalog-2.4.1}/src/parser/json.rs +0 -0
  168. {synalog-2.3.0 → synalog-2.4.1}/src/parser/json_test.rs +0 -0
  169. {synalog-2.3.0 → synalog-2.4.1}/src/parser/mod.rs +0 -0
  170. {synalog-2.3.0 → synalog-2.4.1}/src/parser/names.rs +0 -0
  171. {synalog-2.3.0 → synalog-2.4.1}/src/parser/parse.rs +0 -0
  172. {synalog-2.3.0 → synalog-2.4.1}/src/parser/parse_test.rs +0 -0
  173. {synalog-2.3.0 → synalog-2.4.1}/src/parser/rewrite.rs +0 -0
  174. {synalog-2.3.0 → synalog-2.4.1}/src/parser/rewrite_test.rs +0 -0
  175. {synalog-2.3.0 → synalog-2.4.1}/src/parser/span.rs +0 -0
  176. {synalog-2.3.0 → synalog-2.4.1}/src/parser/span_test.rs +0 -0
  177. {synalog-2.3.0 → synalog-2.4.1}/src/parser/traverse.rs +0 -0
  178. {synalog-2.3.0 → synalog-2.4.1}/src/parser/traverse_test.rs +0 -0
  179. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/assertions.rs +0 -0
  180. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/cast.rs +0 -0
  181. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/contradiction.rs +0 -0
  182. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/dependencies.rs +0 -0
  183. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/directives.rs +0 -0
  184. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/front_matter.rs +0 -0
  185. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/functors.rs +0 -0
  186. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/mod.rs +0 -0
  187. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/orderby.rs +0 -0
  188. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/positional.rs +0 -0
  189. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/recursion.rs +0 -0
  190. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/reserved.rs +0 -0
  191. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/sqlexpr.rs +0 -0
  192. {synalog-2.3.0 → synalog-2.4.1}/src/verifier/vars.rs +0 -0
  193. {synalog-2.3.0 → synalog-2.4.1}/src/wasm.rs +0 -0
  194. {synalog-2.3.0 → synalog-2.4.1}/verified/src/cast.rs +0 -0
  195. {synalog-2.3.0 → synalog-2.4.1}/verified/src/contradiction.rs +0 -0
  196. {synalog-2.3.0 → synalog-2.4.1}/verified/src/page.rs +0 -0
  197. {synalog-2.3.0 → synalog-2.4.1}/verified/src/plan.rs +0 -0
  198. {synalog-2.3.0 → synalog-2.4.1}/verified/src/quote.rs +0 -0
  199. {synalog-2.3.0 → synalog-2.4.1}/zensical.toml +0 -0
@@ -300,7 +300,7 @@ dependencies = [
300
300
 
301
301
  [[package]]
302
302
  name = "synalog"
303
- version = "2.3.0"
303
+ version = "2.4.1"
304
304
  dependencies = [
305
305
  "anyhow",
306
306
  "indexmap",
@@ -316,7 +316,7 @@ dependencies = [
316
316
 
317
317
  [[package]]
318
318
  name = "synalog-verified"
319
- version = "2.3.0"
319
+ version = "2.4.1"
320
320
  dependencies = [
321
321
  "vstd",
322
322
  ]
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "synalog"
3
- version = "2.3.0"
3
+ version = "2.4.1"
4
4
  edition = "2024"
5
5
  description = "Logic programming for AI agents: Datalog-family language compiling to optimized SQL"
6
6
  license = "Apache-2.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: synalog
3
- Version: 2.3.0
3
+ Version: 2.4.1
4
4
  Classifier: Programming Language :: Rust
5
5
  Classifier: Programming Language :: Python :: Implementation :: CPython
6
6
  Classifier: Programming Language :: Python :: 3
@@ -62,7 +62,7 @@ Project-URL: Repository, https://github.com/synalinks/synalog
62
62
  # Synalog
63
63
  ## Logic programming for AI agents: Datalog-family language compiling to optimized SQL
64
64
 
65
- Synalog is a logic programming language from the [Datalog](https://en.wikipedia.org/wiki/Datalog) family, a fork of [Logica](https://logica.dev/) with the entire engine (parser, compiler and verifier) **rewritten in Rust**. It compiles to optimized **SQL** and ships as a Python package built on [PyO3](https://pyo3.rs/): parsing is **~86.7x faster** and compilation **~13.7x faster** than the original Python implementation, so validating and compiling a program is effectively instant.
65
+ Synalog is a logic programming language from the [Datalog](https://en.wikipedia.org/wiki/Datalog) family, a fork of [Logica](https://logica.dev/) with the entire engine (parser, compiler and verifier) **rewritten in Rust**. It compiles to optimized **SQL** and ships as a Python package built on [PyO3](https://pyo3.rs/): parsing is **~52x faster** and compilation **~51x faster** than the original Python implementation, so validating and compiling a program is effectively instant.
66
66
 
67
67
  Synalog was built for the AI agents era. The main idea is to give an agent a **dynamic semantic layer** over its data: a layer of named concepts and rules that the agent both reads from *and writes to* at inference time. Unlike a traditional BI semantic layer, which is modeled once by humans and frozen, Synalog's layer is authored on the fly: the agent extracts entities and relationships into **knowledge graphs**, derives meaning with composable **logical rules**, and reasons over time with **temporal reasoning**: accumulating all of it as structured, reusable memory.
68
68
 
@@ -576,19 +576,19 @@ Each engine has its own SQL dialect for string literals, array syntax, GROUP BY
576
576
 
577
577
  ## Benchmark
578
578
 
579
- The Rust core is benchmarked against the original Python Logica implementation on every program of the compiler test suite (504 programs across 6 engines). Both run **in-process**: Synalog through the same PyO3 extension that `pip install synalog` ships, so the numbers measure exactly what a Python caller gets:
579
+ The Rust core is benchmarked against the original Python Logica implementation on every program of the compiler test suite (28,614 programs across 6 engines). Both run **in-process**: Synalog through the same PyO3 extension that `pip install synalog` ships, so the numbers measure exactly what a Python caller gets:
580
580
 
581
581
  | | Python Logica | Synalog (Rust) | Speedup |
582
582
  |---|---|---|---|
583
- | Parse | 13.4 s | 0.15 s | **87x** |
584
- | Compile | 61.3 s | 5.2 s | **13x** |
585
- | Verify | n/a | 0.16 s | Rust-only |
583
+ | Parse | 230.5 s | 4.1 s | **52x** |
584
+ | Compile | 1117.7 s | 25.7 s | **51x** |
585
+ | Verify | n/a | 12.1 s | Rust-only |
586
586
 
587
587
  <p align="center">
588
588
  <img src="https://raw.githubusercontent.com/synalinks/synalog/main/docs/benchmark/speedup_by_engine.png" alt="Synalog vs Python Logica: speedup by SQL engine" width="820">
589
589
  </p>
590
590
 
591
- Speedup is the geometric mean of per-program speedups (every program weighted equally). Parsing is uniformly ~85x to ~88x faster; compilation ranges from ~11x (trino, presto) to ~19x (duckdb). Verification (safety, stratification, recursion and reserved-name checks) is a Synalog-specific pass with no standalone Python equivalent. Per-engine tables and methodology are on the [Benchmark](https://synalinks.github.io/synalog/benchmark/) page; reproduce with `python3 benchmark.py`.
591
+ Speedup is the geometric mean of per-program speedups (every program weighted equally). Parsing is uniformly ~52x faster; compilation ranges from ~38x (trino, presto) to ~102x (duckdb). Verification (safety, stratification, recursion and reserved-name checks) is a Synalog-specific pass with no standalone Python equivalent. Per-engine tables and methodology are on the [Benchmark](https://synalinks.github.io/synalog/benchmark/) page; reproduce with `python3 benchmark.py`.
592
592
 
593
593
  ## Verification
594
594
 
@@ -20,7 +20,7 @@
20
20
  # Synalog
21
21
  ## Logic programming for AI agents: Datalog-family language compiling to optimized SQL
22
22
 
23
- Synalog is a logic programming language from the [Datalog](https://en.wikipedia.org/wiki/Datalog) family, a fork of [Logica](https://logica.dev/) with the entire engine (parser, compiler and verifier) **rewritten in Rust**. It compiles to optimized **SQL** and ships as a Python package built on [PyO3](https://pyo3.rs/): parsing is **~86.7x faster** and compilation **~13.7x faster** than the original Python implementation, so validating and compiling a program is effectively instant.
23
+ Synalog is a logic programming language from the [Datalog](https://en.wikipedia.org/wiki/Datalog) family, a fork of [Logica](https://logica.dev/) with the entire engine (parser, compiler and verifier) **rewritten in Rust**. It compiles to optimized **SQL** and ships as a Python package built on [PyO3](https://pyo3.rs/): parsing is **~52x faster** and compilation **~51x faster** than the original Python implementation, so validating and compiling a program is effectively instant.
24
24
 
25
25
  Synalog was built for the AI agents era. The main idea is to give an agent a **dynamic semantic layer** over its data: a layer of named concepts and rules that the agent both reads from *and writes to* at inference time. Unlike a traditional BI semantic layer, which is modeled once by humans and frozen, Synalog's layer is authored on the fly: the agent extracts entities and relationships into **knowledge graphs**, derives meaning with composable **logical rules**, and reasons over time with **temporal reasoning**: accumulating all of it as structured, reusable memory.
26
26
 
@@ -534,19 +534,19 @@ Each engine has its own SQL dialect for string literals, array syntax, GROUP BY
534
534
 
535
535
  ## Benchmark
536
536
 
537
- The Rust core is benchmarked against the original Python Logica implementation on every program of the compiler test suite (504 programs across 6 engines). Both run **in-process**: Synalog through the same PyO3 extension that `pip install synalog` ships, so the numbers measure exactly what a Python caller gets:
537
+ The Rust core is benchmarked against the original Python Logica implementation on every program of the compiler test suite (28,614 programs across 6 engines). Both run **in-process**: Synalog through the same PyO3 extension that `pip install synalog` ships, so the numbers measure exactly what a Python caller gets:
538
538
 
539
539
  | | Python Logica | Synalog (Rust) | Speedup |
540
540
  |---|---|---|---|
541
- | Parse | 13.4 s | 0.15 s | **87x** |
542
- | Compile | 61.3 s | 5.2 s | **13x** |
543
- | Verify | n/a | 0.16 s | Rust-only |
541
+ | Parse | 230.5 s | 4.1 s | **52x** |
542
+ | Compile | 1117.7 s | 25.7 s | **51x** |
543
+ | Verify | n/a | 12.1 s | Rust-only |
544
544
 
545
545
  <p align="center">
546
546
  <img src="https://raw.githubusercontent.com/synalinks/synalog/main/docs/benchmark/speedup_by_engine.png" alt="Synalog vs Python Logica: speedup by SQL engine" width="820">
547
547
  </p>
548
548
 
549
- Speedup is the geometric mean of per-program speedups (every program weighted equally). Parsing is uniformly ~85x to ~88x faster; compilation ranges from ~11x (trino, presto) to ~19x (duckdb). Verification (safety, stratification, recursion and reserved-name checks) is a Synalog-specific pass with no standalone Python equivalent. Per-engine tables and methodology are on the [Benchmark](https://synalinks.github.io/synalog/benchmark/) page; reproduce with `python3 benchmark.py`.
549
+ Speedup is the geometric mean of per-program speedups (every program weighted equally). Parsing is uniformly ~52x faster; compilation ranges from ~38x (trino, presto) to ~102x (duckdb). Verification (safety, stratification, recursion and reserved-name checks) is a Synalog-specific pass with no standalone Python equivalent. Per-engine tables and methodology are on the [Benchmark](https://synalinks.github.io/synalog/benchmark/) page; reproduce with `python3 benchmark.py`.
550
550
 
551
551
  ## Verification
552
552