153 lines
3.9 KiB
Markdown
153 lines
3.9 KiB
Markdown
# Project Status
|
|
|
|
**Version:** 0.1.0 (Early stage, but functional)
|
|
|
|
---
|
|
|
|
## Codebase Size
|
|
|
|
| What | Count |
|
|
|------|-------|
|
|
| Rust source code | ~30,000 lines |
|
|
| Test code | ~8,000 lines |
|
|
| Example `.geolog` files | ~2,300 lines across 30 files |
|
|
| Source files | 84 |
|
|
| Unit tests | 137 (all passing) |
|
|
| Integration tests | 31 (all passing) |
|
|
|
|
---
|
|
|
|
## What Works Well
|
|
|
|
These features are complete and reliable:
|
|
|
|
### Core Engine
|
|
- **Parser** — reads `.geolog` files, gives helpful error messages
|
|
- **Type checker** — catches mistakes like using undefined sorts
|
|
- **Chase algorithm** — derives facts from rules correctly
|
|
- **Equality handling** — when rules say `x = y`, elements are properly merged
|
|
|
|
### Examples That Run
|
|
```bash
|
|
cargo run -- examples/geolog/graph.geolog # Simple directed graph
|
|
cargo run -- examples/geolog/preorder.geolog # Reflexive, transitive relation
|
|
cargo run -- examples/geolog/transitive_closure.geolog # Shows chase in action
|
|
cargo run -- examples/geolog/category.geolog # Category theory basics
|
|
```
|
|
|
|
### Interactive Features
|
|
- REPL with command history
|
|
- Inspect any theory or instance
|
|
- Run chase interactively
|
|
- Save/load with version history
|
|
|
|
---
|
|
|
|
## What Mostly Works
|
|
|
|
These features work but have limitations:
|
|
|
|
### Parameterized Theories
|
|
You can define theories that depend on other instances:
|
|
|
|
```geolog
|
|
theory (N : PetriNet instance) Marking {
|
|
token : Sort;
|
|
token/of : token -> N/P; // References N's places
|
|
}
|
|
```
|
|
|
|
**Limitation:** Nested instances (instances inside instances) only partially work.
|
|
|
|
### Model Search
|
|
The solver can find models satisfying axioms, but:
|
|
- Works best for small models
|
|
- Some search strategies are incomplete
|
|
- No timeout handling
|
|
|
|
---
|
|
|
|
## Known Gaps
|
|
|
|
### Things That Don't Work Yet
|
|
|
|
| Feature | Status |
|
|
|---------|--------|
|
|
| Product types in conclusions | Functions returning records don't fully work |
|
|
| Existentials over products | `exists p : [x:M, y:M]. ...` fails |
|
|
| Field projections in equations | `x.field = y` doesn't compile |
|
|
|
|
### Example of What Fails
|
|
|
|
```geolog
|
|
// This works:
|
|
forall x : M. |- exists y : M. f(x) = y
|
|
|
|
// This doesn't work (product sort in existential):
|
|
forall x : M. |- exists p : [a:M, b:M]. g(x) = p
|
|
```
|
|
|
|
### Silent Failures
|
|
|
|
When the tensor compiler can't handle an axiom, it **silently skips it**. This can be confusing — your axiom looks fine but nothing happens.
|
|
|
|
```geolog
|
|
// This axiom might be silently skipped if it has unsupported patterns:
|
|
ax/complex : forall x. premise |- [a: x, b: x] some_relation;
|
|
// No error, but also no effect
|
|
```
|
|
|
|
---
|
|
|
|
## TODOs in the Code
|
|
|
|
These are marked in the source with `// TODO`:
|
|
|
|
| Location | What's Missing |
|
|
|----------|----------------|
|
|
| `src/repl.rs:84` | Theory type not fully stored in metadata |
|
|
| `src/overlay.rs:380` | Copying functions between structures |
|
|
| `src/store/query.rs:61` | Batch loading for better performance |
|
|
| `src/store/instance.rs` | External references between instances |
|
|
| `src/query/to_relalg.rs` | Some relational operators |
|
|
|
|
---
|
|
|
|
## Test Coverage
|
|
|
|
### What's Tested
|
|
|
|
| Area | Tests |
|
|
|------|-------|
|
|
| Type checking | 14 unit tests |
|
|
| Chase algorithm | Comprehensive unit tests |
|
|
| Parser | 4 unit tests + snapshot tests |
|
|
| Examples | 31 integration tests (one per example file) |
|
|
| Random inputs | 11 property-based test suites |
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
cargo test # Run all tests
|
|
cargo test unit_chase # Run only chase tests
|
|
cargo test --release # Run with optimizations (faster)
|
|
```
|
|
|
|
### Fuzzing
|
|
|
|
The `fuzz/` directory has fuzzing targets that generate random inputs to find crashes:
|
|
|
|
```bash
|
|
cargo +nightly fuzz run fuzz_parser
|
|
```
|
|
|
|
---
|
|
|
|
## What's Being Worked On
|
|
|
|
According to code comments and structure:
|
|
|
|
1. **Lean4 formalization** — Mathematical proofs about correctness (in `proofs/`)
|
|
2. **Better disjunction handling** — Currently fires both branches, should choose one
|
|
3. **Query plan improvements** — More efficient execution
|