Elamur: **Mova** · [Parse](https://mova.elamur.ai/free/en/parse/) · [Dictionary](https://md.dictionary.elamur.ai/free/en/) · [Translate](https://md.translate.elamur.ai/free/en/) · [Research](https://md.research.elamur.ai/free/en/) · [MCP](https://mcp.elamur.ai/) · [Groupants](https://md.groupants.elamur.ai/free/en/)

[Mova](https://md.mova.elamur.ai/free/en/) · [this page in HTML](https://mova.elamur.ai/free/en/docs/tools/correspondence/)

[home](https://md.mova.elamur.ai/free/en/) / [docs](https://md.mova.elamur.ai/free/en/docs/) / [tools](https://md.mova.elamur.ai/free/en/docs/tools/) / mova-correspondence — the relation-catalogue audit

# mova-correspondence — the relation-catalogue audit

`mova-correspondence` checks the typed finite formulas of [models/correspondences.json](https://github.com/ElamurAI/mova-free/blob/main/models/correspondences.json) against their source bindings and the groupant registry, and reports coverage. It is an audit: it never proves a relation and never substitutes a formula for production code. Method: [Correspondences](https://md.mova.elamur.ai/free/en/docs/repo-docs/correspondences/).

## Run

```
cargo build --release -p mova-correspondence
target/release/mova-correspondence scan REPO REGISTRY CATALOG NEW_JSON
# e.g. scan "$REPO" "$REPO/models/contracts.json" "$REPO/models/correspondences.json" "$RUN/scan-1.json"
```

`NEW_JSON` must not exist. The command prints the output path, the coverage, `"proof": false` and `"production_substitution": false`. Run it twice and compare the two reports before claiming a change.

- [← previous bench — one row of fixed measurements](https://md.mova.elamur.ai/free/en/docs/tools/bench/)
- [next → Crab](https://md.mova.elamur.ai/free/en/docs/tools/crab/)
- [↑ back to tools](https://md.mova.elamur.ai/free/en/docs/tools/)
