Logic-as-Tensor Planning Layer for Neural-Symbolic AI
TensorLogic compiles logical rules (predicates, quantifiers, implications) into tensor equations (einsum graphs) with a minimal DSL + IR, enabling neural/symbolic/probabilistic models within a unified tensor computation framework.
- π§ Logic-to-Tensor Compilation: Compile complex logical rules into optimized tensor operations
- β‘ High Performance: SciRS2 backend with SIMD acceleration (2-4x speedup)
- π Python Bindings: Production-ready PyO3 bindings with NumPy integration
- π§ Multiple Backends: CPU, SIMD-accelerated CPU, GPU (OxiCUDA, driver-only)
- π Comprehensive Benchmarks: 24 benchmark groups across 5 suites
- π§ͺ Extensively Tested: 6,982 tests with 100% pass rate
- π Rich Documentation: Tutorials, examples, API docs
- π Ecosystem Integration: OxiRS (RDF*/SHACL), SkleaRS, QuantrS2, TrustformeRS, ToRSh
- π€ Neurosymbolic AI: Bidirectional tensor conversion with ToRSh (pure Rust PyTorch alternative)
Version: 0.1.0 | Status: Stable Release | Date: 2026-04-27
TensorLogic has reached stable release status with comprehensive testing, benchmarking, and documentation:
- β SciRS2 ecosystem upgraded to 0.3.4 β Latest scientific computing backend
- β OxiRS ecosystem upgraded to 0.2.2 β Major RDF/knowledge graph API upgrade
- β SkleaRS upgraded to 0.1.0 stable β Production-ready kernel integration
- β ToRSh upgraded to 0.1.1 β Enhanced neurosymbolic tensor interop
- β oxicode upgraded to 0.2 β Improved serialization/codec
- β
Pure Rust compression β
flate2replaced withoxiarc-deflate(OxiARC policy) - β
RNG unified via scirs2_core β All
rand_09/rand_distr_05aliases removed; no directranddeps - β
No
unwrap()in production/example/bench code β clippy::unwrap_used = 0 - β 6,982/6,982 tests passing (100% pass rate)
- β Zero compiler/clippy warnings β Clean build with latest dependencies
Ready for real-world use in research, production systems, and educational contexts!
use tensorlogic_compiler::compile_to_einsum;
use tensorlogic_ir::{TLExpr, Term};
use tensorlogic_scirs_backend::Scirs2Exec;
use tensorlogic_infer::TlAutodiff;
// Define a logical rule: knows(x, y) β§ knows(y, z) β knows(x, z)
let x = Term::var("x");
let y = Term::var("y");
let z = Term::var("z");
let knows_xy = TLExpr::pred("knows", vec![x.clone(), y.clone()]);
let knows_yz = TLExpr::pred("knows", vec![y.clone(), z.clone()]);
let premise = TLExpr::and(knows_xy, knows_yz);
// Compile to tensor graph
let graph = compile_to_einsum(&premise)?;
// Execute with SciRS2 backend
let mut executor = Scirs2Exec::new();
// Add tensor data...
let result = executor.forward(&graph)?;import pytensorlogic as tl
import numpy as np
# Create logical expressions
x, y = tl.var("x"), tl.var("y")
knows = tl.pred("knows", [x, y])
knows_someone = tl.exists("y", "Person", knows)
# Create compiler context and register domain (required for quantifiers)
ctx = tl.compiler_context()
ctx.add_domain("Person", 100)
# Compile to tensor graph with context
graph = tl.compile_with_context(knows_someone, ctx)
# Execute with data
knows_matrix = np.random.rand(100, 100)
result = tl.execute(graph, {"knows": knows_matrix})
print(f"Result shape: {result['output'].shape}") # (100,)Add to your Cargo.toml:
[dependencies]
tensorlogic-ir = "0.1"
tensorlogic-compiler = "0.1"
tensorlogic-scirs-backend = { version = "0.1", features = ["simd"] }# From PyPI (when published)
pip install pytensorlogic
# From source
cd crates/tensorlogic-py
pip install maturin
maturin develop --releaseFor detailed installation instructions, see crates/tensorlogic-py/PACKAGING.md.
- Project Guide: Complete project overview and development guide
- Python Packaging: Building and distributing Python wheels
- SciRS2 Integration Policy: Using SciRS2 as the tensor backend
- Security Policy: Reporting vulnerabilities
- Contributing: How to contribute
- Getting Started: Beginner-friendly introduction (Jupyter)
- Advanced Topics: Multi-arity predicates, optimization (Jupyter)
Rust Examples (in examples/):
00_minimal_rule- Basic predicate and compilation01_exists_reduce- Existential quantifier with reduction02_scirs2_execution- Full execution with SciRS2 backend03_rdf_integration- OxiRS bridge with RDF* data04_compilation_strategies- Comparing 6 strategy presets
Python Examples (in crates/tensorlogic-py/python_examples/):
- 10+ examples covering all features
- Backend selection and capabilities
- Compilation strategies
- Integration patterns
TensorLogic follows a modular architecture with clear separation of concerns:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Python Bindings β
β (tensorlogic-py via PyO3) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Planning Layer β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β IR & AST β β Compiler β β Adapters β β
β β (types) ββ β (logicβIR) ββ β (metadata) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Execution Layer β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Traits β β SciRS2 β β Training β β
β β (interfaces) β β (CPU/SIMD) β β (loops) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Integration Layer β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β OxiRS β β SkleaRS β β TrustformeRS β β
β β (RDF*/SHACL)β β (kernels) β β (attention) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β ββββββββββββββββ ββββββββββββββββ β
β β QuantrS2 β β ToRSh β β
β β (PGM/BP) β β (PyTorch Alt)β β
β ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The project is organized as a Cargo workspace with 13 specialized crates:
| Crate | Purpose | Status |
|---|---|---|
| tensorlogic | Root crate re-exporting the public API | β Stable |
| tensorlogic-cli | REPL and command-line interface | β Stable |
| Crate | Purpose | Status |
|---|---|---|
| tensorlogic-ir | AST and IR types (Term, TLExpr, EinsumGraph) |
β Complete |
| tensorlogic-compiler | Logic β tensor mapping with static analysis | β Complete |
| tensorlogic-infer | Execution/autodiff traits (TlExecutor, TlAutodiff) |
β Complete |
| tensorlogic-adapters | Symbol tables, axis metadata, domain masks | β Complete |
| Crate | Purpose | Status |
|---|---|---|
| tensorlogic-scirs-backend | Runtime executor (CPU/SIMD/GPU via features) | β Production Ready |
| tensorlogic-train | Training loops, loss wiring, schedules, callbacks | β Complete |
| Crate | Purpose | Status |
|---|---|---|
| tensorlogic-oxirs-bridge | RDF*/GraphQL/SHACL β TL rules; provenance binding | β Complete |
| tensorlogic-sklears-kernels | Logic-derived similarity kernels for SkleaRS | β Core Features |
| tensorlogic-quantrs-hooks | PGM/message-passing interop for QuantrS2 | β Core Features |
| tensorlogic-trustformers | Transformer-as-rules (attention/FFN as einsum) | β Complete |
| tensorlogic-py | PyO3 bindings with abi3-py39 support |
β Production Ready |
| Crate | Purpose | Status |
|---|---|---|
| tensorlogic-oxicuda-rng | GPU-accelerated RNG (PCG/Box-Muller) with CPU fallback β 47 tests | β Complete |
| tensorlogic-oxicuda-solver | GPU-accelerated linear solvers (LU/Cholesky/QR/CG) with CPU fallback β 35 tests | β Complete |
| tensorlogic-oxicuda-sparse | GPU-accelerated sparse matrix ops (SpMV/SpMM/CSR) with CPU fallback β 13 tests | β Complete |
TensorLogic uses these default mappings (configurable per use case):
| Logic Operation | Tensor Equivalent | Configurable Via |
|---|---|---|
AND(a, b) |
a * b (Hadamard product) |
CompilationStrategy |
OR(a, b) |
max(a, b) or soft variant |
CompilationStrategy |
NOT(a) |
1 - a |
CompilationStrategy |
βx. P(x) |
sum(P, axis=x) or max |
Quantifier config |
βx. P(x) |
NOT(βx. NOT(P(x))) (dual) |
Quantifier config |
a β b |
max(1-a, b) or ReLU(b-a) |
ImplicationStrategy |
Six preset strategies for different use cases:
- soft_differentiable - Neural network training (smooth gradients)
- hard_boolean - Discrete Boolean logic (exact semantics)
- fuzzy_godel - GΓΆdel fuzzy logic (min/max operations)
- fuzzy_product - Product fuzzy logic (probabilistic)
- fuzzy_lukasiewicz - Εukasiewicz fuzzy logic (bounded)
- probabilistic - Probabilistic interpretation
TensorLogic includes comprehensive benchmarks across 5 suites (24 benchmark groups):
# Run all benchmarks
cargo bench -p tensorlogic-scirs-backend
# Individual suites
cargo bench --bench forward_pass
cargo bench --bench simd_comparison --features simd
cargo bench --bench memory_footprint
cargo bench --bench gradient_stability
cargo bench --bench throughputEnable SIMD for 2-4x performance improvement:
[dependencies]
tensorlogic-scirs-backend = { version = "0.1", features = ["simd"] }Or build with target-specific optimizations:
RUSTFLAGS="-C target-cpu=native" cargo build --release --features simdTypical speedups with SIMD acceleration:
| Operation Type | Size | CPU | SIMD | Speedup |
|---|---|---|---|---|
| Element-wise (add) | 100K | 50 Β΅s | 15 Β΅s | 3.3x |
| Element-wise (mul) | 100K | 48 Β΅s | 14 Β΅s | 3.4x |
| Matrix (hadamard) | 100Γ100 | 120 Β΅s | 35 Β΅s | 3.4x |
| Reduction (sum) | 100K | 45 Β΅s | 18 Β΅s | 2.5x |
Results on Intel Core i7 with AVX2. Your results may vary.
TensorLogic integrates seamlessly with ToRSh (pure Rust PyTorch alternative) for neurosymbolic AI applications:
use tensorlogic_scirs_backend::torsh_interop::*;
use torsh_tensor::Tensor;
use torsh_core::device::DeviceType;
// Logic execution results β Neural network input
let logic_results = compile_and_execute_rules()?;
let torsh_tensor = tl_to_torsh_f32(&logic_results, DeviceType::Cpu)?;
// Neural network processing
let nn_output = neural_network.forward(torsh_tensor)?;
// Neural output β Logic constraints
let logic_constraints = torsh_to_tl(&nn_output)?;
verify_constraints(&logic_constraints)?;Features:
- β Bidirectional conversion (TensorLogic β ToRSh)
- β Type support (f32/f64 with automatic conversion)
- β Lossless roundtrip for f64 precision
- β
Feature-gated:
--features torsh(optional) - β Pure Rust (no C++ PyTorch dependencies)
Use Cases:
- Differentiable logic programming: Gradient descent on logic rules
- Hybrid systems: Combine symbolic reasoning with neural learning
- Explainable AI: Logic constraints on neural network outputs
- Knowledge-guided learning: Inject symbolic knowledge into neural models
Basic Example:
cargo run --example torsh_integration --features torshKnowledge Graph Reasoning (knowledge_graph_reasoning.rs):
cargo run --example knowledge_graph_reasoning --features torshDemonstrates hybrid logic-neural reasoning for knowledge completion:
- Symbolic rules: transitivity, symmetry (friendOf relations)
- Neural embeddings: entity similarity via learned representations
- Hybrid scoring: Ξ±Β·logic + (1-Ξ±)Β·neural with configurable weights
- Constraint validation: bidirectional conversion for verification
Constrained Neural Optimization (constrained_neural_optimization.rs):
cargo run --example constrained_neural_optimization --features torshShows how to enforce logical constraints on neural network outputs:
- Logical constraints: mutual exclusivity, hierarchical rules
- Violation detection: automatic constraint checking
- Guided correction: constraint-aware prediction adjustments
- Training integration: constraint loss for gradient descent
See also: torsh_integration.rs for basic ToRSh interop usage.
TensorLogic has extensive test coverage:
# Run all tests
cargo test --workspace --no-fail-fast
# Or use nextest (faster)
cargo nextest run --workspace
# Python tests
cd crates/tensorlogic-py
pytest tests/ -vTest Statistics:
- 6,982 tests across all crates (lib + integration + doc)
- 100% pass rate (12 tests intentionally skipped)
- Zero compiler warnings, zero clippy warnings, zero rustdoc warnings
- ~294K lines of Rust code (843 source files β tokei)
- Coverage includes:
- Unit tests (logic operations, type checking, optimization)
- Integration tests (end-to-end workflows)
- Property tests (algebraic properties)
- Documentation tests (examples in code documentation)
- Python tests (comprehensive pytest suite)
- Rust 1.70+ (
rustuprecommended) - Python 3.9+ (for Python bindings)
- Cargo nextest (optional, faster testing)
# Clone repository
git clone https://github.com/cool-japan/tensorlogic.git
cd tensorlogic
# Build all crates
cargo build
# Build with SIMD
cargo build --features simd
# Run example
cargo run --example 00_minimal_rule# Format code
cargo fmt --all
# Run linter
cargo clippy --workspace --all-targets -- -D warnings
# Run tests
cargo nextest run --workspacecd crates/tensorlogic-py
# Install in development mode
make dev
# Run tests
make test
# Build wheels
make wheelsSee crates/tensorlogic-py/PACKAGING.md for detailed instructions.
use tensorlogic_ir::{Term, PredicateSignature};
// Define typed predicates
let sig = PredicateSignature::new("parent", 2)
.with_argument_type(0, "Person")
.with_argument_type(1, "Person")
.with_return_type("Bool");use tensorlogic_ir::optimization::OptimizationPipeline;
let mut graph = compile_to_einsum(&expr)?;
// Apply optimizations
let pipeline = OptimizationPipeline::default();
let stats = pipeline.optimize(&mut graph)?;
println!("Eliminated {} dead nodes", stats.nodes_eliminated);use tensorlogic_oxirs_bridge::ProvenanceTracker;
let mut tracker = ProvenanceTracker::new();
tracker.add_rule("rule_1", &expr);
// Track tensor computations back to source rules
let provenance = tracker.get_provenance(tensor_id);use tensorlogic_infer::TlBatchExecutor;
let inputs = vec![tensor1, tensor2, tensor3];
let batch_result = executor.execute_batch(&graph, inputs)?;use tensorlogic_oxirs_bridge::schema::SchemaAnalyzer;
let analyzer = SchemaAnalyzer::from_turtle(&rdf_data)?;
let symbols = analyzer.extract_symbol_table()?;
let rules = shacl_to_tensorlogic(&shacl_constraints)?;use tensorlogic_sklears_kernels::{RuleSimilarityKernel, TensorKernel};
let kernel = RuleSimilarityKernel::new(rule1, rule2);
let similarity = kernel.compute(&data1, &data2)?;use tensorlogic_trustformers::{SelfAttention, MultiHeadAttention};
let attention = MultiHeadAttention::new(512, 8);
let output = attention.forward(&query, &key, &value)?;| Phase | Component | Status | Completion |
|---|---|---|---|
| 0 | Repo Hygiene | β Complete | 100% |
| 1 | IR & Compiler | β Complete | 100% |
| 2 | Engine Traits | β Complete | 100% |
| 3 | SciRS2 Backend | β Production Ready | 100% |
| 4 | OxiRS Bridge | β Complete | 100% |
| 4.5 | Core Enhancements | β Production Ready | 100% |
| 5 | Interop Crates | β Core Features | 50-100% |
| 6 | Training Scaffolds | β Complete | 100% |
| 7 | Python Bindings | β Production Ready | 98% |
| 8 | Validation & Scale | β Complete | 100% |
Overall Project Status: π Stable Release (0.1.0)
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
- π Bug reports and fixes
- π Documentation improvements
- β¨ New features and optimizations
- π§ͺ Additional tests and benchmarks
- π Multi-language support
- π¦ Packaging and distribution
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
cargo nextest run) - Format code (
cargo fmt) - Run linter (
cargo clippy) - Commit your changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
TensorLogic is developed and maintained by COOLJAPAN OU (Team Kitasan).
If you find TensorLogic useful, please consider sponsoring the project to support continued development of the Pure Rust ecosystem.
https://github.com/sponsors/cool-japan
Your sponsorship helps us:
- Maintain and improve the COOLJAPAN ecosystem
- Keep the entire ecosystem (OxiBLAS, OxiFFT, SciRS2, etc.) 100% Pure Rust
- Provide long-term support and security updates
Licensed under Apache 2.0 License. See LICENSE for details.
- Tensor Logic Paper: arXiv:2510.12269
- SciRS2: Scientific computing in Rust
- PyO3: Rust bindings for Python
- Maturin: Building Python packages from Rust
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- GPU backend support - β COMPLETE (OxiCUDA driver-only, no CUDA SDK needed β tensorlogic-oxicuda-{rng,solver,sparse,backend})
- Additional fuzzy logic variants
- ToRSh tensor interoperability - β COMPLETE (pure Rust alternative to PyTorch)
- Provenance API in Python bindings - β COMPLETE (get_provenance)
- SciRS2 ecosystem upgrade - β COMPLETE (upgraded to 0.3.4)
- OxiRS ecosystem upgrade - β COMPLETE (upgraded to 0.2.2)
- rand 0.10 full alignment - β COMPLETE
- Distributed execution support
- JIT compilation
- Additional interop crates
- Performance profiling tools
- Visual graph editor
- Cloud deployment templates
- Auto-tuning and optimization
- Multi-language support (Julia, R)
Built with β€οΈ by the COOLJAPAN team
For detailed project information, see CLAUDE.md and TODO.md.