Skip to content

Commit abf2927

Browse files
committed
docs: substantive CRG C annotation (EXPLAINME.adoc)
1 parent 76158b1 commit abf2927

1 file changed

Lines changed: 50 additions & 15 deletions

File tree

EXPLAINME.adoc

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,72 @@ The README makes claims. This file backs them up.
77

88
[quote, README]
99
____
10-
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
10+
Ochránce is a neurosymbolic filesystem verification framework built with Idris2 dependent types. It provides mathematically proven guarantees about filesystem integrity through A2ML (Attestation & Audit Markup Language), verified Merkle trees with size-indexed proofs, and linear type repair operations.
1111
____
1212

13-
== Technology Choices
13+
Three components orchestrate this: A2ML parser/validator (parses filesystem manifests), verified Merkle trees (compile-time structure proofs), and ECHIDNA integration (neural proof synthesis for verification).
1414

15-
[cols="1,2"]
16-
|===
17-
| Technology | Learn More
15+
== Two Verifiable Claims from How-It-Works
1816

19-
| **Zig** | https://ziglang.org
20-
| **Idris2 ABI** | https://www.idris-lang.org
21-
|===
17+
=== Claim 1: A2ML Lexer and Parser Are Structurally Recursive and Total
18+
19+
**Location**: `/var/mnt/eclipse/repos/ochrance/ochrance-core/A2ML/Lexer.idr` and `/var/mnt/eclipse/repos/ochrance/ochrance-core/A2ML/Parser.idr` (Idris2 modules)
20+
21+
**How verified**: Both modules use the `%default total` directive, requiring all functions to be total (no partial match, no undefined behavior). The lexer is structurally recursive: it tokenizes input by consuming characters and recursing on the remainder (proof: input size strictly decreases). The parser is similarly total: it parses tokens using sized types (`List (n : Nat)`) to guarantee termination (proof: token list shrinks). README (§Overview) claims "A2ML Parser/Validator" with compile-time structure proofs; this is verified by the Idris2 type checker itself — if either module had a partial function, `idris2 --check` would reject it with an error, not compile.
22+
23+
**Caveat**: Idris2 totality checking is a sound approximation but not perfect. Deeply nested mutual recursion can escape detection in rare cases, though practice shows this is extremely rare.
24+
25+
=== Claim 2: Verified Merkle Tree Size Guarantees Are Compile-Time Proofs
26+
27+
**Location**: `/var/mnt/eclipse/repos/ochrance/ochrance-core/Framework/Merkle.idr` (Idris2 Merkle tree with size-indexed types)
28+
29+
**How verified**: The Merkle tree is defined as a size-indexed binary tree: `MerkleTree : (size : Nat) → Type`. At compile time, Idris2 verifies that all leaf nodes are at depth `log2(size)`. The tree operations (leaf insertion, hash computation, proof generation) take dependent proofs that structure is maintained. README (§Architecture) claims "Verified Merkle trees — Size-indexed binary trees with compile-time structure proofs." This is proven by the type signature itself: if you try to construct a tree of size 8 with only 7 leaves, the type checker rejects it because the dependent type `MerkleTree 8` requires exactly 8 leaves.
30+
31+
**Caveat**: The placeholder hash functions in `Merkle.idr` use XOR, not cryptographic hashes (BLAKE3/SHA-256). This is noted in the CLAUDE.md as a critical TODO. The structure proofs are valid but cryptographic strength is absent.
2232

2333
== Dogfooded Across The Account
2434

25-
Uses the hyperpolymath ABI/FFI standard (Idris2 + Zig). Same pattern used across
26-
https://github.com/hyperpolymath/proven[proven],
27-
https://github.com/hyperpolymath/burble[burble], and
28-
https://github.com/hyperpolymath/gossamer[gossamer].
35+
Ochránce uses the hyperpolymath ABI/FFI standard: Idris2 specs → Zig FFI → C bindings. The filesystem module is the reference VerifiedSubsystem implementation for the ochrance-framework (which defines an abstract interface for Filesystem, Memory, Network, Crypto modules). This pattern is reused across proven (formally verified library) and feedback-o-tron (Idris2 ABI for submitter credentials).
36+
37+
Also integrates with ECHIDNA for neural proof synthesis — FFI calls to libechidna.so via Zig.
2938

3039
== File Map
3140

3241
[cols="1,2"]
3342
|===
3443
| Path | What's There
3544

36-
| `src/` | Source code
37-
| `ffi/` | Foreign function interface
38-
| `test(s)/` | Test suite
45+
| `ochrance-core/A2ML/Lexer.idr` | Structurally recursive, total lexer for A2ML markup (tokenizes manifest)
46+
| `ochrance-core/A2ML/Parser.idr` | Sized-type parser: parses tokens to AST with compile-time termination proof
47+
| `ochrance-core/A2ML/Validator.idr` | Semantic validation: ensures AST satisfies invariants (hash format, block refs, etc.)
48+
| `ochrance-core/A2ML/Serializer.idr` | Roundtrip serialization: AST → A2ML → AST (identity proof)
49+
| `ochrance-core/Framework/Interface.idr` | Abstract VerifiedSubsystem interface; defines what all subsystems must prove
50+
| `ochrance-core/Framework/Proof.idr` | Proof witness types; generic proof structure for all subsystems
51+
| `ochrance-core/Framework/Error.idr` | Error taxonomy: q/* (query), p/* (proof), z/* (zone/system)
52+
| `ochrance-core/Framework/FFI/Echidna.idr` | FFI to ECHIDNA neural prover (via Zig C ABI)
53+
| `modules/filesystem/Types.idr` | Filesystem types: FSState, Block, FSSnapshot with dependent proofs
54+
| `modules/filesystem/Merkle.idr` | Verified Merkle tree: size-indexed with compile-time structure proofs (placeholder XOR hashes)
55+
| `modules/filesystem/Verify.idr` | Verification logic: block hashes, tree integrity, attestation signatures
56+
| `modules/filesystem/Repair.idr` | Linear type repair: repair operations consume old state (Quantity 1)
57+
| `ochrance.ipkg` | Package definition for core library
58+
| `ochrance-fs.ipkg` | Package definition for filesystem module
3959
|===
4060

61+
== Testing Critical Paths
62+
63+
* **Lexer totality**: `idris2 --check ochrance-core/A2ML/Lexer.idr` — Idris2 type checker verifies structurally recursive, no partial functions
64+
* **Parser totality**: `idris2 --check ochrance-core/A2ML/Parser.idr` — sized types ensure termination proof
65+
* **Validator**: `tests/validator_test.idr` — roundtrip A2ML → AST → A2ML preserves structure
66+
* **Merkle tree**: `tests/merkle_test.idr` — size-indexed tree construction and hash verification
67+
* **Repair linearity**: `tests/repair_test.idr` — linear type system prevents use-after-repair bugs (compile-time error if violated)
68+
* **ECHIDNA FFI**: `tests/echidna_ffi_test.idr` — call libechidna.so via Zig FFI, verify proof synthesis works
69+
70+
== Known Limitations & TODOs
71+
72+
* **Hashes**: Currently XOR (placeholder). Must replace with BLAKE3/SHA-256 via Zig FFI.
73+
* **Attestation**: Cryptographic signature verification not yet integrated (planned).
74+
* **Linear repair**: Idris2 linear types framework incomplete for full use-after-repair prevention (ongoing research).
75+
4176
== Questions?
4277

4378
Open an issue or reach out directly — happy to explain anything in more detail.

0 commit comments

Comments
 (0)