lawref.evaluator.effects
Effect materialization §127–§128 — второй шаг power-runtime.
Для каждой ACTIVE power-позиции с accepted exercise-событием проверяются valid_when, temporal scope и применимые immunity (§127-список), и только затем constitutive-шаг создаёт legal effect (institutional факт в store, proof-узел norm_creation с механизмом power_exercise).
Невалидная попытка (§127): empirical event сохраняется как был accepted;
публикуется invalidly_exercised(position) (std-предикат) — никакого
автоматического void ab initio.
Immunity §128 блокирует transformation, не attempted event. Соперничество
Power(E)/Immunity(E) решается rule-приоритетами создавших правил (§106);
непобеждённая несравнимая пара — conservative materialization §127:
effect НЕ материализуется, default no_effect_until_resolved
(effect_conflict_policy профиля — вне v1), transformation-запрос по E
получает UNRESOLVED_NORMATIVE_CONFLICT (проброс через blocked-карту).
Attributes
| Name | Description |
|---|---|
NORM_STD | No description. |
VALID_WHEN_STATUS_TESTS | No description. |
Functions
| Name | Description |
|---|---|
active_immunities | §128: ACTIVE-позиции иммунитета — общий срез обоих чтений (E-0120). |
exercise_literal | Exercise-паттерн (Term, v1: CallTerm) → атом события. |
immunity_verdict | §128: применимые иммунитеты против ЭТОГО эффекта и исход их |
materialize_effects | Возвращает (blocked, created): blocked — literal_key(effect) → |
valid_when_conjuncts | §127 valid_when → конъюнкты-пары (тест, литерал) в порядке записи |
valid_when_holds | §65/§67 (E-0191): проходит ли статус пары литерала статус-тест. |
valid_when_literal | §127 valid_when → пара (статус-тест §65, ground-литерал). |
valid_when_open_judgments | §127/§47.3 (E-0100, E-0101, E-0191): литералы-отношения суждения, от |
NORM_STDattributemodule attribute#
NORM_STD = 'urn:law:std#'VALID_WHEN_STATUS_TESTSattributemodule attribute#
VALID_WHEN_STATUS_TESTS = ('established', 'not_known', 'refuted', 'unknown', 'supported', 'monotone')active_immunitiesfunction#
def active_immunities(positions: list[dict]) -> list[dict]§128: ACTIVE-позиции иммунитета — общий срез обоих чтений (E-0120).
exercise_literalfunction#
def exercise_literal(exercise: dict) -> dict | NoneExercise-паттерн (Term, v1: CallTerm) → атом события.
immunity_verdictfunction#
def immunity_verdict(effect_literal: dict, payload: dict, pos_rule: str | None, immunities: list[dict], rule_gt) -> tuple[dict | None, bool, list[dict]]§128: применимые иммунитеты против ЭТОГО эффекта и исход их соперничества с полномочием по приоритетам §106.
Возвращает (winner_block, conflict, applicable): winner_block —
иммунитет, победивший по §106 (эффект блокирован), conflict —
непобеждённая несравнимая пара §127 (эффект тоже не создаётся,
conservative materialization), applicable — все иммунитеты, чей
protected_effect совпал (и against, если задан, направлен против
holder-а полномочия).
ОДНА функция на два чтения (E-0120): материализация эффекта здесь же и
путь запроса судье (whynot.power_judgment_blockers). Вторая копия
критерия применимости разошлась бы молча — ровно так канал суждения три
errata подряд не видел того, что видит материализация.
materialize_effectsfunction#
def materialize_effects(store: SupportStore, positions: list[dict], registry: ProofRegistry, issues: list[dict], rule_reach: dict[str, set[str]], limits: dict | None = None, judgment_decls: dict[str, dict] | None = None) -> tuple[dict[str, dict], int]Возвращает (blocked, created): blocked — literal_key(effect) → {reason, positions} для transformation-запросов (reason == “conflict” → UNRESOLVED_NORMATIVE_CONFLICT в query_truth); created — число материализованных эффектов (прогресс §143-итерации).
judgment_decls — отношения суждения §47.3 программы (E-0100): попытка
exercise при valid_when, не решённом ПО ПРИЧИНЕ судьи, не есть
недействительное осуществление — орган ещё не высказался.
valid_when_conjunctsfunction#
def valid_when_conjuncts(valid_when) -> list[tuple[str, dict]] | None§127 valid_when → конъюнкты-пары (тест, литерал) в порядке записи
(E-0190, E-0191).
Исполнимое подмножество 0.1: литерал (в том числе под статусной обёрткой
§65) либо and таких литералов; вложенные and читаются одним плоским
списком. Всё прочее (or, not, сравнение, терм) — None: форма вне
подмножества, о чём вызывающий обязан сказать NON_EXECUTABLE_RULE, а не
читать её как «условие не выполнено». Общий с путём запроса судье.
valid_when_holdsfunction#
def valid_when_holds(test: str, status: str) -> bool§65/§67 (E-0191): проходит ли статус пары литерала статус-тест.
Те же тесты, что у конъюнкта тела правила (solver.solve): not_known —
нет положительной опоры (NEITHER или FALSE_ONLY), unknown — ровно
NEITHER, refuted — ровно FALSE_ONLY, supported/monotone — любая
положительная опора, established — ровно TRUE_ONLY.
valid_when_literalfunction#
def valid_when_literal(valid_when) -> tuple[str, dict] | None§127 valid_when → пара (статус-тест §65, ground-литерал).
Голый литерал — established (§66); статусная обёртка несёт свой тест
(E-0191): раньше читалась только её формула, и not_known(c) вычислялся
как «c установлено». Общий с путём запроса судьи
(whynot.power_judgment_blockers, E-0100): вторая копия списка допустимых
форм разошлась бы молча.
valid_when_open_judgmentsfunction#
def valid_when_open_judgments(conjuncts: list[tuple[str, dict]], store: SupportStore, judgment_decls: dict[str, dict]) -> list[dict] | None§127/§47.3 (E-0100, E-0101, E-0191): литералы-отношения суждения, от
ответа судьи по которым зависит valid_when; None — условие выполнено.
Не прошедший конъюнкт с парой NEITHER — неопределённый (ответ судьи может
его решить); не прошедший конъюнкт с определённой парой — опровергнут, и
полномочие мертво, ответ судьи ничего не изменит (пустой список). Для
established это в точности прежнее «FALSE_ONLY или BOTH».
Documentation for Arxo. Writings — blog.arxo.io.
Anonymous visit counts on stats.arxo.io, no cookies.