# lawref.evaluator.proof

*module*

Реестр proof-узлов — SPEC [§180](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#180-rule-application-proof).

support-id → proof-node-id, детерминированно и однократно: один и тот же
assertion даёт один и тот же узел при любом числе обращений.

## lawref.evaluator.proof.ProofRegistry

*class*

```python
class ProofRegistry
```

Единый реестр proof-узлов: support-id → proof-node-id (детерминированно).

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L11-L110)

### lawref.evaluator.proof.ProofRegistry.assertions

*attribute* · *instance attribute*

```python
assertions = assertions
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L15-L15)

### lawref.evaluator.proof.ProofRegistry.by_support

*attribute* · *instance attribute*

```python
by_support: dict[str, str] = {}
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L17-L17)

### lawref.evaluator.proof.ProofRegistry.last_application_id

*attribute* · *instance attribute*

```python
last_application_id: str | None = None
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L18-L18)

### lawref.evaluator.proof.ProofRegistry.nodes

*attribute* · *instance attribute*

```python
nodes: list[dict] = []
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L16-L16)

### lawref.evaluator.proof.ProofRegistry.add_application

*method*

```python
def add_application(rule_id: str, seq: int, subst: dict[str, dict], conclusion: dict, premises: list[str]) -> str
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L43-L61)

### lawref.evaluator.proof.ProofRegistry.annotate_a3_application

*method*

```python
def annotate_a3_application(rule: dict, calls: Iterable[dict] = ()) -> None
```

Attach A3 row provenance to the just-created ordinary rule proof.

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L85-L110)

### lawref.evaluator.proof.ProofRegistry.annotate_definition_application

*method*

```python
def annotate_definition_application(rule: dict) -> None
```

DECISION-0151 / [§180](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#180-rule-application-proof): применение правила, порождённого определением
[§144](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/20-part-xix-definitions-presumptions-fictions-exceptions.ru.md#144-definition), несёт `attributes.definition` — понятие (символ-цель ребра
provenance), режим, половину и номер альтернативы. Объяснение [§183](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#183-human-readable-explanation)
читает это поле и говорит «по определению», а не «по правилу».
В content-id узла [§180](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#180-rule-application-proof) поле не входит: тождество применения —
правило, подстановка, посылки и вывод.

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L63-L83)

### lawref.evaluator.proof.ProofRegistry.for_support

*method*

```python
def for_support(support_id: str) -> str
```

[View source](https://github.com-arxohq/arxo-io/law/blob/2edc2b92ce22b52e03f4081d2769a58229684379/engines/lawref/lawref/evaluator/proof.py#L20-L41)
