# lawref.evaluator.normconflict

*module*

[§105.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1051-базовые-normative-conflict-patterns)/[§105.2](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1052-обнаружение-и-разрешение-конфликта-позиций): конфликт нормативных ПОЗИЦИЙ — образцы, доказательство, исход.

Пункт 4 перечня [§105.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1051-базовые-normative-conflict-patterns) (power против immunity) здесь не считается: его стороны
— позиция и ЭФФЕКТ, и он живёт в материализации [§127.2](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/18-part-xvii-normative-positions.ru.md#127-power) (`effects.py`). Здесь —
пункты 1–3, а пункты 5–7 («две powers не конфликтуют», «две liberties не
конфликтуют», «duty и claim-right — один вид») суть утверждения об ОТСУТСТВИИ
конфликта и выражены тем, что ни один образец их не берёт; сторожат их
отрицательные векторы, а не строка кода.

Три источника несовместимости и их старшинство — [§105.2](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1052-обнаружение-и-разрешение-конфликта-позиций):

1. СТРУКТУРНЫЙ (пункт 2): обязанность воздержания и свобода совершить ТО ЖЕ
   действие. Доказывать нечего — несовместимость есть тождество действия.
2. ЯВНОЕ ОТНОШЕНИЕ `urn:law:std#incompatible(A, B)` над норм-ШАБЛОНАМИ:
   несовместимость есть свойство целей, а цели живут в шаблоне.
3. SOLVER-ASSISTED в разрешимом фрагменте — только при `solverProfile` в
   манифесте И с сертификатом, который движок ПЕРЕПРОВЕРЯЕТ. Сертификат
   выпускается сюда же, в proof-граф ([§105.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1051-базовые-normative-conflict-patterns) требует его именно там), и
   независимо проверяем повторением: он называет предикат, ключевые позиции
   [§45.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/08-part-viii-type-system.ru.md#451-relation-keys) и различающиеся столбцы.

Разрешимый фрагмент выбран не по удобству, а по тому, где вопрос РЕШАЕТСЯ без
внешнего решателя: цели созданных позиций уже ground, поэтому совместная
выполнимость двух целей сводится к вопросу о функциональной зависимости —
две цели, требующие от ОДНОГО ключа [§45.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/08-part-viii-type-system.ru.md#451-relation-keys) разных значений, совместно
невыполнимы, и это проверяется сравнением, а не поиском. Всё вне фрагмента
даёт `UNKNOWN` и ребра не создаёт ([§105.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1051-базовые-normative-conflict-patterns) дословно).

## lawref.evaluator.normconflict.STD

*attribute* · *module attribute*

```python
STD = 'urn:law:std#'
```

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

## lawref.evaluator.normconflict.detect

*function*

```python
def detect(positions: list[dict], nodes: list[dict], store, registry, issues: list[dict], rule_reach: dict[str, set[str]], manifest: dict, env: Any = None) -> None
```

Обнаружить, доказать и разрешить конфликты [§105.1](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#1051-базовые-normative-conflict-patterns) пунктов 1–3.

Изменяет позиции НА МЕСТЕ: проигравшая приоритету получает `DEFEATED` и
узел `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-вывода-нормы), потому
что это тот же [§107](https://github.com/arxohq/law/blob/master/spec/SPEC.ru/16-part-xv-defeasible-semantics-and-conflict-resolution.ru.md#107-defeat), а не отдельный механизм.

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