# lawref.argmap

*module*

Аргументная карта — L4-lite, работа О-3 плана LAYERS-NEXT.

Проекция ГОТОВОГО proof-графа [§179](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#179-proof-graph)–[§187](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#187-proof-hash) в граф «аргумент/атака» плюс
grounded-разметка. Это пост-обработка витрины завершённого вычисления:
ни одного обращения к движку изнутри, никакого влияния на evaluation
(рекурсивные аргументы и preferred-семантика — полный L4, работа С-2).

Мини-спецификация проекции — из данных [§107](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#107-defeat)/[§111](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#111-порядок-evaluation-strata)/[§115](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#115-конфликтный-результат), не из ASPIC:

- **аргумент** — узел `rule_application` [§180](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#180-rule-application-proof); **базовый аргумент** —
  не-application опора, атакующая из defeat [§107.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1071-defeat-вывода-нормы) (assertion либо strict
  установление): его нечем атаковать в L1, он всегда `in`;
- **атака** — из defeat-узла [§107](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#107-defeat): жертва — `attributes.defeated`,
  атакующие — `premises` без жертвы; вид по `attributes.reason`:
  `defeater` → `undercut` ([§107.3](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#107-defeat)), `priority` → `rebut-priority` ([§107.2](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#107-defeat)),
  `strict-opposition` → `rebut-strict` ([§107.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1071-defeat-вывода-нормы));
- **неразрешённый конфликт** [§115](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#115-конфликтный-результат) (ambiguity preserving [§112](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#112-ambiguity-policy)) — взаимные
  `rebut-unresolved` между непобеждёнными кандидатами обеих сторон;
- **undermine** (атака на посылку) в L1 отдельным событием не существует:
  посылка атакуется выведением комплемента, а его движок материализует
  стратами [§110](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#110-stratification)–[§111](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#111-порядок-evaluation-strata) — побеждённый кандидат не порождает опор, и правило
  ниже по страте просто не срабатывает. Несработавшее правило — не
  аргумент; его blocker-граф [§185](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/26-part-xxv-proof-graph-and-explanations.ru.md#185-why-not) остаётся запросу `why_not`.

Grounded-разметка: неподвижная точка «`in` — все атакующие `out`; `out` —
есть атакующий `in`; остальное `undec`». Результат детерминирован
единственностью grounded extension; порядок обхода влияет только на число
итераций.

Чтение меток против движка: `in` — вывод устоял бесспорно; `out` —
побеждён [§107](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#107-defeat); `undec` — устоял в неснятом конфликте (BOTH [§112](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#112-ambiguity-policy)).

## lawref.argmap.ATTACK_KINDS

*attribute* · *module attribute*

```python
ATTACK_KINDS = {'defeater': 'undercut', 'priority': 'rebut-priority', 'strict-opposition': 'rebut-strict'}
```

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

## lawref.argmap.SCHEMA_VERSION

*attribute* · *module attribute*

```python
SCHEMA_VERSION = 'law.argmap/0.1'
```

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

## lawref.argmap.map_bytes

*function*

```python
def map_bytes(argmap: dict) -> bytes
```

Канонические байты карты ([§208](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/28-part-xxvii-canonical-legal-ir.ru.md#208-canonical-serialization)-эмиттер) — контракт детерминизма.

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

## lawref.argmap.project

*function*

```python
def project(document: dict) -> dict[str, Any]
```

Аргументная карта evaluation-документа (см. мини-спецификацию выше).

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

## lawref.argmap.render_text

*function*

```python
def render_text(argmap: dict, headings: dict[str, str] | None = None) -> str
```

Человекочитаемая карта: метка, аргумент, вывод, входящие атаки.

`headings` — вербализация B1 (LS [§3](https://github.com/arxohq/law/blob/master/spec/LAYERS-SURFACES.ru.md)): заголовки блоков `.lawread.md` по
id правила (остаток О-3, закрыт при полном L4/С-2). С паком правило
называется словами юриста, без — идентификатором; карта (--json) в обоих
случаях байтово одна — вербализация касается только текстового вида.

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